alpha-visualizer 1.3.2__tar.gz → 1.3.4__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (708) hide show
  1. alpha_visualizer-1.3.2/.hypothesis/constants/a143537c99265376 → alpha_visualizer-1.3.4/.hypothesis/constants/3039d4d1f0d58a79 +1 -1
  2. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/CHANGELOG.md +18 -0
  3. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/PKG-INFO +1 -1
  4. alpha_visualizer-1.3.4/docs/screenshots/en/backtest-tv.png +0 -0
  5. alpha_visualizer-1.3.4/docs/screenshots/en/browse.png +0 -0
  6. alpha_visualizer-1.3.4/docs/screenshots/en/compare-heatmap.png +0 -0
  7. alpha_visualizer-1.3.4/docs/screenshots/en/detail.png +0 -0
  8. alpha_visualizer-1.3.4/docs/screenshots/en/ideas.png +0 -0
  9. alpha_visualizer-1.3.4/docs/screenshots/en/live.png +0 -0
  10. alpha_visualizer-1.3.4/docs/screenshots/en/optimize.png +0 -0
  11. alpha_visualizer-1.3.4/docs/screenshots/en/strategy-signal-tv.png +0 -0
  12. alpha_visualizer-1.3.4/docs/screenshots/ja/backtest-tv.png +0 -0
  13. alpha_visualizer-1.3.4/docs/screenshots/ja/browse.png +0 -0
  14. alpha_visualizer-1.3.4/docs/screenshots/ja/compare-heatmap.png +0 -0
  15. alpha_visualizer-1.3.4/docs/screenshots/ja/detail.png +0 -0
  16. alpha_visualizer-1.3.4/docs/screenshots/ja/ideas.png +0 -0
  17. alpha_visualizer-1.3.4/docs/screenshots/ja/live.png +0 -0
  18. alpha_visualizer-1.3.4/docs/screenshots/ja/optimize.png +0 -0
  19. alpha_visualizer-1.3.4/docs/screenshots/ja/strategy-signal-tv.png +0 -0
  20. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/openapi.json +1 -1
  21. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/charts/tv/EquityDrawdownPaneTV.tsx +91 -13
  22. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/charts/tv/__tests__/EquityDrawdownPaneTV.test.tsx +112 -0
  23. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/components/live/LivePositionView.tsx +27 -3
  24. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/components/live/__tests__/LivePositionView.test.tsx +56 -0
  25. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/pyproject.toml +2 -2
  26. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/src/alpha_visualizer/__init__.py +1 -1
  27. alpha_visualizer-1.3.2/src/alpha_visualizer/static/assets/BrowsePage-BtjWf_pg.js → alpha_visualizer-1.3.4/src/alpha_visualizer/static/assets/BrowsePage-BEPv8i_r.js +2 -2
  28. alpha_visualizer-1.3.2/src/alpha_visualizer/static/assets/BrowsePage-BtjWf_pg.js.map → alpha_visualizer-1.3.4/src/alpha_visualizer/static/assets/BrowsePage-BEPv8i_r.js.map +1 -1
  29. alpha_visualizer-1.3.2/src/alpha_visualizer/static/assets/ChartDataTable-B_PMsr6F.js → alpha_visualizer-1.3.4/src/alpha_visualizer/static/assets/ChartDataTable-dR4i0xte.js +2 -2
  30. alpha_visualizer-1.3.2/src/alpha_visualizer/static/assets/ChartDataTable-B_PMsr6F.js.map → alpha_visualizer-1.3.4/src/alpha_visualizer/static/assets/ChartDataTable-dR4i0xte.js.map +1 -1
  31. alpha_visualizer-1.3.2/src/alpha_visualizer/static/assets/ComparePage-BQLtkozx.js → alpha_visualizer-1.3.4/src/alpha_visualizer/static/assets/ComparePage-BXYzurL5.js +2 -2
  32. alpha_visualizer-1.3.2/src/alpha_visualizer/static/assets/ComparePage-BQLtkozx.js.map → alpha_visualizer-1.3.4/src/alpha_visualizer/static/assets/ComparePage-BXYzurL5.js.map +1 -1
  33. alpha_visualizer-1.3.2/src/alpha_visualizer/static/assets/DetailPage-DkgwWfN1.js → alpha_visualizer-1.3.4/src/alpha_visualizer/static/assets/DetailPage-CYYypa9D.js +2 -2
  34. alpha_visualizer-1.3.2/src/alpha_visualizer/static/assets/DetailPage-DkgwWfN1.js.map → alpha_visualizer-1.3.4/src/alpha_visualizer/static/assets/DetailPage-CYYypa9D.js.map +1 -1
  35. alpha_visualizer-1.3.4/src/alpha_visualizer/static/assets/EquityDrawdownPaneTV-CKE4ZeC_.js +2 -0
  36. alpha_visualizer-1.3.4/src/alpha_visualizer/static/assets/EquityDrawdownPaneTV-CKE4ZeC_.js.map +1 -0
  37. alpha_visualizer-1.3.2/src/alpha_visualizer/static/assets/IdeasPage-CZt2Um3Q.js → alpha_visualizer-1.3.4/src/alpha_visualizer/static/assets/IdeasPage-Bs7yfwo7.js +2 -2
  38. alpha_visualizer-1.3.2/src/alpha_visualizer/static/assets/IdeasPage-CZt2Um3Q.js.map → alpha_visualizer-1.3.4/src/alpha_visualizer/static/assets/IdeasPage-Bs7yfwo7.js.map +1 -1
  39. alpha_visualizer-1.3.2/src/alpha_visualizer/static/assets/LivePage-nyToYYsN.js → alpha_visualizer-1.3.4/src/alpha_visualizer/static/assets/LivePage-DUYLKDB7.js +2 -2
  40. alpha_visualizer-1.3.2/src/alpha_visualizer/static/assets/LivePage-nyToYYsN.js.map → alpha_visualizer-1.3.4/src/alpha_visualizer/static/assets/LivePage-DUYLKDB7.js.map +1 -1
  41. alpha_visualizer-1.3.2/src/alpha_visualizer/static/assets/LiveTab-CB_3VlBE.js → alpha_visualizer-1.3.4/src/alpha_visualizer/static/assets/LiveTab-DXzJxU14.js +2 -2
  42. alpha_visualizer-1.3.4/src/alpha_visualizer/static/assets/LiveTab-DXzJxU14.js.map +1 -0
  43. alpha_visualizer-1.3.2/src/alpha_visualizer/static/assets/MaintenancePage-B2IUJ3dt.js → alpha_visualizer-1.3.4/src/alpha_visualizer/static/assets/MaintenancePage-DPViJS0Q.js +2 -2
  44. alpha_visualizer-1.3.2/src/alpha_visualizer/static/assets/MaintenancePage-B2IUJ3dt.js.map → alpha_visualizer-1.3.4/src/alpha_visualizer/static/assets/MaintenancePage-DPViJS0Q.js.map +1 -1
  45. alpha_visualizer-1.3.2/src/alpha_visualizer/static/assets/MetricsSummaryBarV2-BXEamLE3.js → alpha_visualizer-1.3.4/src/alpha_visualizer/static/assets/MetricsSummaryBarV2-8oDntE_g.js +2 -2
  46. alpha_visualizer-1.3.2/src/alpha_visualizer/static/assets/MetricsSummaryBarV2-BXEamLE3.js.map → alpha_visualizer-1.3.4/src/alpha_visualizer/static/assets/MetricsSummaryBarV2-8oDntE_g.js.map +1 -1
  47. alpha_visualizer-1.3.2/src/alpha_visualizer/static/assets/ReportPage-izblXE1Q.js → alpha_visualizer-1.3.4/src/alpha_visualizer/static/assets/ReportPage-BTyui937.js +2 -2
  48. alpha_visualizer-1.3.2/src/alpha_visualizer/static/assets/ReportPage-izblXE1Q.js.map → alpha_visualizer-1.3.4/src/alpha_visualizer/static/assets/ReportPage-BTyui937.js.map +1 -1
  49. alpha_visualizer-1.3.2/src/alpha_visualizer/static/assets/ReturnDistributionChart-D69B-itS.js → alpha_visualizer-1.3.4/src/alpha_visualizer/static/assets/ReturnDistributionChart-CN6C-pWs.js +2 -2
  50. alpha_visualizer-1.3.2/src/alpha_visualizer/static/assets/ReturnDistributionChart-D69B-itS.js.map → alpha_visualizer-1.3.4/src/alpha_visualizer/static/assets/ReturnDistributionChart-CN6C-pWs.js.map +1 -1
  51. alpha_visualizer-1.3.2/src/alpha_visualizer/static/assets/RunLogDetails-CG22uYt8.js → alpha_visualizer-1.3.4/src/alpha_visualizer/static/assets/RunLogDetails-C4662i4B.js +2 -2
  52. alpha_visualizer-1.3.2/src/alpha_visualizer/static/assets/RunLogDetails-CG22uYt8.js.map → alpha_visualizer-1.3.4/src/alpha_visualizer/static/assets/RunLogDetails-C4662i4B.js.map +1 -1
  53. alpha_visualizer-1.3.2/src/alpha_visualizer/static/assets/RunsPage-CXsBfoVg.js → alpha_visualizer-1.3.4/src/alpha_visualizer/static/assets/RunsPage--P5KB6Aw.js +2 -2
  54. alpha_visualizer-1.3.2/src/alpha_visualizer/static/assets/RunsPage-CXsBfoVg.js.map → alpha_visualizer-1.3.4/src/alpha_visualizer/static/assets/RunsPage--P5KB6Aw.js.map +1 -1
  55. alpha_visualizer-1.3.2/src/alpha_visualizer/static/assets/SettingsToggles-tt-Rmlqz.js → alpha_visualizer-1.3.4/src/alpha_visualizer/static/assets/SettingsToggles-DPZul5Ek.js +2 -2
  56. alpha_visualizer-1.3.2/src/alpha_visualizer/static/assets/SettingsToggles-tt-Rmlqz.js.map → alpha_visualizer-1.3.4/src/alpha_visualizer/static/assets/SettingsToggles-DPZul5Ek.js.map +1 -1
  57. alpha_visualizer-1.3.2/src/alpha_visualizer/static/assets/ShareCardButton-DEt_rFr8.js → alpha_visualizer-1.3.4/src/alpha_visualizer/static/assets/ShareCardButton-Bt6mrRao.js +2 -2
  58. alpha_visualizer-1.3.2/src/alpha_visualizer/static/assets/ShareCardButton-DEt_rFr8.js.map → alpha_visualizer-1.3.4/src/alpha_visualizer/static/assets/ShareCardButton-Bt6mrRao.js.map +1 -1
  59. alpha_visualizer-1.3.2/src/alpha_visualizer/static/assets/errorMessage-CogRMclS.js → alpha_visualizer-1.3.4/src/alpha_visualizer/static/assets/errorMessage-DlX-ZPy3.js +2 -2
  60. alpha_visualizer-1.3.2/src/alpha_visualizer/static/assets/errorMessage-CogRMclS.js.map → alpha_visualizer-1.3.4/src/alpha_visualizer/static/assets/errorMessage-DlX-ZPy3.js.map +1 -1
  61. alpha_visualizer-1.3.2/src/alpha_visualizer/static/assets/index-CSTPOquK.js → alpha_visualizer-1.3.4/src/alpha_visualizer/static/assets/index-DsjiJ9NK.js +3 -3
  62. alpha_visualizer-1.3.2/src/alpha_visualizer/static/assets/index-CSTPOquK.js.map → alpha_visualizer-1.3.4/src/alpha_visualizer/static/assets/index-DsjiJ9NK.js.map +1 -1
  63. alpha_visualizer-1.3.2/src/alpha_visualizer/static/assets/useBacktestData-BcRTA3hv.js → alpha_visualizer-1.3.4/src/alpha_visualizer/static/assets/useBacktestData-B31tpHTO.js +2 -2
  64. alpha_visualizer-1.3.2/src/alpha_visualizer/static/assets/useBacktestData-BcRTA3hv.js.map → alpha_visualizer-1.3.4/src/alpha_visualizer/static/assets/useBacktestData-B31tpHTO.js.map +1 -1
  65. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/src/alpha_visualizer/static/index.html +1 -1
  66. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/uv.lock +1 -1
  67. alpha_visualizer-1.3.2/docs/screenshots/en/backtest-tv.png +0 -0
  68. alpha_visualizer-1.3.2/docs/screenshots/en/browse.png +0 -0
  69. alpha_visualizer-1.3.2/docs/screenshots/en/compare-heatmap.png +0 -0
  70. alpha_visualizer-1.3.2/docs/screenshots/en/detail.png +0 -0
  71. alpha_visualizer-1.3.2/docs/screenshots/en/ideas.png +0 -0
  72. alpha_visualizer-1.3.2/docs/screenshots/en/live.png +0 -0
  73. alpha_visualizer-1.3.2/docs/screenshots/en/optimize.png +0 -0
  74. alpha_visualizer-1.3.2/docs/screenshots/en/strategy-signal-tv.png +0 -0
  75. alpha_visualizer-1.3.2/docs/screenshots/ja/backtest-tv.png +0 -0
  76. alpha_visualizer-1.3.2/docs/screenshots/ja/browse.png +0 -0
  77. alpha_visualizer-1.3.2/docs/screenshots/ja/compare-heatmap.png +0 -0
  78. alpha_visualizer-1.3.2/docs/screenshots/ja/detail.png +0 -0
  79. alpha_visualizer-1.3.2/docs/screenshots/ja/ideas.png +0 -0
  80. alpha_visualizer-1.3.2/docs/screenshots/ja/live.png +0 -0
  81. alpha_visualizer-1.3.2/docs/screenshots/ja/optimize.png +0 -0
  82. alpha_visualizer-1.3.2/docs/screenshots/ja/strategy-signal-tv.png +0 -0
  83. alpha_visualizer-1.3.2/src/alpha_visualizer/static/assets/EquityDrawdownPaneTV-BqqjTDsR.js +0 -2
  84. alpha_visualizer-1.3.2/src/alpha_visualizer/static/assets/EquityDrawdownPaneTV-BqqjTDsR.js.map +0 -1
  85. alpha_visualizer-1.3.2/src/alpha_visualizer/static/assets/LiveTab-CB_3VlBE.js.map +0 -1
  86. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/.agents/skills/source-command-audit-licenses/SKILL.md +0 -0
  87. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/.agents/skills/source-command-pre-release/SKILL.md +0 -0
  88. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/.claude/commands/audit-licenses.md +0 -0
  89. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/.claude/commands/pre-release.md +0 -0
  90. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/.codex/hooks.json +0 -0
  91. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/.github/ISSUE_TEMPLATE/bug_report.yml +0 -0
  92. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/.github/ISSUE_TEMPLATE/bug_report_ja.yml +0 -0
  93. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/.github/ISSUE_TEMPLATE/config.yml +0 -0
  94. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/.github/ISSUE_TEMPLATE/feature_request.yml +0 -0
  95. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/.github/ISSUE_TEMPLATE/feature_request_ja.yml +0 -0
  96. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/.github/PULL_REQUEST_TEMPLATE.md +0 -0
  97. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/.github/codeql/README.md +0 -0
  98. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/.github/codeql/codeql-config.yml +0 -0
  99. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/.github/dependabot.yml +0 -0
  100. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/.github/workflows/ci.yml +0 -0
  101. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/.github/workflows/codeql.yml +0 -0
  102. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/.github/workflows/lighthouse.yml +0 -0
  103. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/.github/workflows/release.yml +0 -0
  104. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/.gitignore +0 -0
  105. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/.hypothesis/.gitignore +0 -0
  106. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/.hypothesis/constants/0bf3463e8f4751b8 +0 -0
  107. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/.hypothesis/constants/0caad6595136948b +0 -0
  108. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/.hypothesis/constants/184fa6728d185660 +0 -0
  109. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/.hypothesis/constants/296b8092179c9f55 +0 -0
  110. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/.hypothesis/constants/312a7aaf12a1fd47 +0 -0
  111. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/.hypothesis/constants/316886ef98081ce9 +0 -0
  112. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/.hypothesis/constants/331e194303817b32 +0 -0
  113. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/.hypothesis/constants/36df1978b70731f9 +0 -0
  114. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/.hypothesis/constants/43f703bafb1e4b04 +0 -0
  115. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/.hypothesis/constants/4577b97f57a8a832 +0 -0
  116. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/.hypothesis/constants/4726660442f99a00 +0 -0
  117. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/.hypothesis/constants/4a1c4d1532cab28e +0 -0
  118. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/.hypothesis/constants/4b255f25d1067b71 +0 -0
  119. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/.hypothesis/constants/4fd44198986300fe +0 -0
  120. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/.hypothesis/constants/508b282112ab038e +0 -0
  121. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/.hypothesis/constants/5320b01940d4c4ce +0 -0
  122. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/.hypothesis/constants/59c16b30deb5c037 +0 -0
  123. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/.hypothesis/constants/5c80be020ed7a646 +0 -0
  124. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/.hypothesis/constants/5c9eb073058f11a0 +0 -0
  125. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/.hypothesis/constants/5fca39058ed3753e +0 -0
  126. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/.hypothesis/constants/64f671cc8bd3c7e4 +0 -0
  127. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/.hypothesis/constants/6abf3e9a1356666c +0 -0
  128. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/.hypothesis/constants/707dd0d075295200 +0 -0
  129. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/.hypothesis/constants/757b1f8305546439 +0 -0
  130. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/.hypothesis/constants/7cea79ac6c0799bb +0 -0
  131. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/.hypothesis/constants/7f90c9d611001617 +0 -0
  132. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/.hypothesis/constants/8d9ea99caee79fd4 +0 -0
  133. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/.hypothesis/constants/906238816b505c1e +0 -0
  134. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/.hypothesis/constants/98d0c8b0e6532609 +0 -0
  135. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/.hypothesis/constants/99c8a89c4a9a7859 +0 -0
  136. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/.hypothesis/constants/9c2871fc1ddbab71 +0 -0
  137. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/.hypothesis/constants/a636a4647020033d +0 -0
  138. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/.hypothesis/constants/ab4df659c6b192db +0 -0
  139. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/.hypothesis/constants/acddbf8018c5d884 +0 -0
  140. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/.hypothesis/constants/af039261f357a5c1 +0 -0
  141. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/.hypothesis/constants/b5541576e1e9aea7 +0 -0
  142. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/.hypothesis/constants/b6221357177fc116 +0 -0
  143. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/.hypothesis/constants/b9ff5bcd3a53e3a7 +0 -0
  144. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/.hypothesis/constants/bfd4c6ca4462fe73 +0 -0
  145. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/.hypothesis/constants/c4312fe8499bc1f7 +0 -0
  146. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/.hypothesis/constants/c5349cb90ddc7968 +0 -0
  147. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/.hypothesis/constants/d34317036474de6e +0 -0
  148. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/.hypothesis/constants/da39a3ee5e6b4b0d +0 -0
  149. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/.hypothesis/constants/dbe657c7851479a7 +0 -0
  150. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/.hypothesis/constants/e41b0128c49db70e +0 -0
  151. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/.hypothesis/constants/e44a457d795e56c2 +0 -0
  152. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/.hypothesis/constants/e52ef865e1fc122f +0 -0
  153. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/.hypothesis/constants/ea2d606acbfff989 +0 -0
  154. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/.hypothesis/constants/eed5e66c16ae84b8 +0 -0
  155. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/.hypothesis/constants/f7c4a04c97c0daf8 +0 -0
  156. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/.hypothesis/constants/fa443af6269a6e02 +0 -0
  157. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/.hypothesis/constants/fa54b8596401d232 +0 -0
  158. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/.hypothesis/constants/ff4517cbfe51fea1 +0 -0
  159. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/AGENTS.md +0 -0
  160. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/CLAUDE.md +0 -0
  161. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/CODE_OF_CONDUCT.en.md +0 -0
  162. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/CODE_OF_CONDUCT.md +0 -0
  163. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/CONTRIBUTING.en.md +0 -0
  164. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/CONTRIBUTING.md +0 -0
  165. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/LICENSE +0 -0
  166. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/NOTICE +0 -0
  167. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/README.en.md +0 -0
  168. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/README.md +0 -0
  169. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/SECURITY.en.md +0 -0
  170. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/SECURITY.md +0 -0
  171. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/THIRDPARTY_LICENSES.txt +0 -0
  172. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/cliff.toml +0 -0
  173. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/docs/adr/0001-pages-vs-screens.md +0 -0
  174. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/docs/adr/0002-charts-visx-vs-components.md +0 -0
  175. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/docs/adr/0003-openapi-typescript-codegen.md +0 -0
  176. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/docs/adr/0004-condition-node-discriminated-union.md +0 -0
  177. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/docs/lighthouse-ci.md +0 -0
  178. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/docs/screenshots/en/compare.png +0 -0
  179. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/docs/screenshots/en/strategy.png +0 -0
  180. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/docs/screenshots/ja/compare.png +0 -0
  181. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/docs/screenshots/ja/strategy.png +0 -0
  182. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/docs/superpowers/plans/2026-07-25-live-equity-rich.md +0 -0
  183. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/docs/superpowers/plans/2026-07-26-browse-recipe-rollup.md +0 -0
  184. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/docs/superpowers/plans/2026-07-27-browse-symbol-coverage.md +0 -0
  185. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/docs/superpowers/plans/2026-07-27-maintenance-orphan-runs.md +0 -0
  186. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/docs/superpowers/specs/2026-07-25-live-equity-rich-design.md +0 -0
  187. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/docs/superpowers/specs/2026-07-26-browse-recipe-rollup-design.md +0 -0
  188. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/docs/superpowers/specs/2026-07-27-browse-symbol-coverage-design.md +0 -0
  189. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/docs/superpowers/specs/2026-07-27-maintenance-orphan-runs-design.md +0 -0
  190. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/.gitignore +0 -0
  191. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/.npmrc +0 -0
  192. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/.size-limit.json +0 -0
  193. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/.storybook/main.ts +0 -0
  194. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/.storybook/preview.ts +0 -0
  195. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/CLAUDE.md +0 -0
  196. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/README.md +0 -0
  197. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/THIRDPARTY_FONTS.md +0 -0
  198. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/e2e/fixtures/README.md +0 -0
  199. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/e2e/fixtures/forge/data/historical/SPY_1d.parquet +0 -0
  200. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/e2e/fixtures/forge/data/ideas/ideas.json +0 -0
  201. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/e2e/fixtures/forge/data/results/backtest_results.db +0 -0
  202. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/e2e/fixtures/forge/data/strategies/dual_symbol_qqq.json +0 -0
  203. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/e2e/fixtures/forge/data/strategies/dual_symbol_spy.json +0 -0
  204. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/e2e/fixtures/forge/data/strategies/ema_trend_v1.json +0 -0
  205. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/e2e/fixtures/forge/data/strategies/ema_trend_v2.json +0 -0
  206. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/e2e/fixtures/forge/data/strategies/ema_trend_v3.json +0 -0
  207. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/e2e/fixtures/forge/data/strategies/idle_recipe_v1.json +0 -0
  208. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/e2e/fixtures/forge/data/strategies/idle_recipe_v2.json +0 -0
  209. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/e2e/fixtures/forge/data/strategies/momo_breakout.json +0 -0
  210. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/e2e/fixtures/forge/data/strategies/no_symbol_v1.json +0 -0
  211. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/e2e/fixtures/forge/data/strategies/rsi_reversal.json +0 -0
  212. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/e2e/fixtures/forge/data/strategies/sma_cross.json +0 -0
  213. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/e2e/fixtures/forge/forge.yaml +0 -0
  214. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/e2e/helpers/locators.ts +0 -0
  215. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/e2e/samples/sample-fixture.spec.ts +0 -0
  216. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/e2e/screenshots/capture.spec.ts +0 -0
  217. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/e2e/screenshots/equity-tv.spec.ts +0 -0
  218. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/e2e/screenshots/strategy-signal-tv.spec.ts +0 -0
  219. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/e2e/specs/browse.spec.ts +0 -0
  220. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/e2e/specs/compare.spec.ts +0 -0
  221. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/e2e/specs/detail.spec.ts +0 -0
  222. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/e2e/specs/i18n.spec.ts +0 -0
  223. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/e2e/specs/maintenance.spec.ts +0 -0
  224. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/e2e/specs/share.spec.ts +0 -0
  225. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/e2e/visual/README.md +0 -0
  226. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/e2e/visual/__snapshots__/linux/equity-drawdown-tv.png +0 -0
  227. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/e2e/visual/__snapshots__/linux/strategy-signal-tv.png +0 -0
  228. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/e2e/visual/tv-charts.spec.ts +0 -0
  229. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/eslint.config.js +0 -0
  230. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/index.html +0 -0
  231. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/package.json +0 -0
  232. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/playwright.config.ts +0 -0
  233. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/playwright.samples.config.ts +0 -0
  234. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/playwright.screenshots.config.ts +0 -0
  235. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/playwright.visual.config.ts +0 -0
  236. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/pnpm-lock.yaml +0 -0
  237. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/pnpm-workspace.yaml +0 -0
  238. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/public/favicon.svg +0 -0
  239. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/public/icons.svg +0 -0
  240. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/api/__tests__/client.test.ts +0 -0
  241. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/api/client.ts +0 -0
  242. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/api/types.gen.ts +0 -0
  243. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/api/types.ts +0 -0
  244. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/charts/tv/CompareEquityTV.stories.tsx +0 -0
  245. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/charts/tv/CompareEquityTV.tsx +0 -0
  246. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/charts/tv/EquityDrawdownPaneTV.stories.tsx +0 -0
  247. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/charts/tv/RollingMetricsChartTV.stories.tsx +0 -0
  248. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/charts/tv/RollingMetricsChartTV.tsx +0 -0
  249. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/charts/tv/StrategySignalChartTV.stories.tsx +0 -0
  250. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/charts/tv/StrategySignalChartTV.tsx +0 -0
  251. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/charts/tv/WFOEquityTV.stories.tsx +0 -0
  252. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/charts/tv/WFOEquityTV.tsx +0 -0
  253. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/charts/tv/__tests__/CompareEquityTV.test.tsx +0 -0
  254. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/charts/tv/__tests__/RollingMetricsChartTV.test.tsx +0 -0
  255. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/charts/tv/__tests__/StrategySignalChartTV.test.tsx +0 -0
  256. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/charts/tv/__tests__/WFOEquityTV.test.tsx +0 -0
  257. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/charts/tv/__tests__/data.test.ts +0 -0
  258. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/charts/tv/__tests__/regimeBands.test.ts +0 -0
  259. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/charts/tv/__tests__/theme.test.ts +0 -0
  260. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/charts/tv/__tests__/trades.test.ts +0 -0
  261. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/charts/tv/data.ts +0 -0
  262. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/charts/tv/regimeBands.ts +0 -0
  263. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/charts/tv/theme.ts +0 -0
  264. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/charts/tv/trades.ts +0 -0
  265. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/charts/visx/AnnualReturnsBarV.tsx +0 -0
  266. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/charts/visx/CorrelationHeatmapV.tsx +0 -0
  267. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/charts/visx/MAEMFEScatterV.tsx +0 -0
  268. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/charts/visx/MonthlyHeatmapV.tsx +0 -0
  269. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/charts/visx/OptimizeHeatmapV.tsx +0 -0
  270. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/charts/visx/OptimizeScatterV.tsx +0 -0
  271. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/charts/visx/Sparkline.stories.tsx +0 -0
  272. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/charts/visx/Sparkline.tsx +0 -0
  273. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/components/AppFooter.tsx +0 -0
  274. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/components/AppNav.tsx +0 -0
  275. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/components/CommandPalette.tsx +0 -0
  276. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/components/ConfirmActionButton.tsx +0 -0
  277. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/components/DetailToolbar.tsx +0 -0
  278. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/components/MetricsSummaryBarV2.stories.tsx +0 -0
  279. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/components/MetricsSummaryBarV2.tsx +0 -0
  280. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/components/RootLayout.tsx +0 -0
  281. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/components/RouteErrorScreen.tsx +0 -0
  282. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/components/RunLogDetails.tsx +0 -0
  283. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/components/SettingsToggles.tsx +0 -0
  284. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/components/ShareCardButton.tsx +0 -0
  285. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/components/StrategyHero.tsx +0 -0
  286. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/components/__tests__/AppFooter.test.tsx +0 -0
  287. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/components/__tests__/AppNav.test.tsx +0 -0
  288. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/components/__tests__/CommandPalette.test.tsx +0 -0
  289. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/components/__tests__/CorrelationHeatmap.test.tsx +0 -0
  290. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/components/__tests__/MetricsSummaryBarV2.test.tsx +0 -0
  291. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/components/__tests__/RootLayout.test.tsx +0 -0
  292. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/components/__tests__/RouteErrorScreen.test.tsx +0 -0
  293. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/components/__tests__/SettingsToggles.test.tsx +0 -0
  294. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/components/__tests__/ShareCardButton.test.tsx +0 -0
  295. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/components/__tests__/ShareCardXButton.test.tsx +0 -0
  296. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/components/__tests__/responsive-styles.test.tsx +0 -0
  297. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/components/browser/CollapsibleSection.tsx +0 -0
  298. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/components/browser/CompareFloatingBar.tsx +0 -0
  299. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/components/browser/CreateStrategyEntry.tsx +0 -0
  300. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/components/browser/FilterBar.tsx +0 -0
  301. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/components/browser/GroupByToggle.tsx +0 -0
  302. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/components/browser/Heroline.tsx +0 -0
  303. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/components/browser/RecipeRow.tsx +0 -0
  304. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/components/browser/RunCompareView.tsx +0 -0
  305. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/components/browser/RunHistoryTab.tsx +0 -0
  306. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/components/browser/SavedViews.tsx +0 -0
  307. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/components/browser/StrategyRow.tsx +0 -0
  308. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/components/browser/StrategySlidePanel.tsx +0 -0
  309. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/components/browser/StrategyTable.tsx +0 -0
  310. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/components/browser/StrategyTableFooter.tsx +0 -0
  311. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/components/browser/SymbolCoverageTable.tsx +0 -0
  312. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/components/browser/__tests__/CollapsibleSection.test.tsx +0 -0
  313. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/components/browser/__tests__/CreateStrategyEntry.test.tsx +0 -0
  314. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/components/browser/__tests__/FilterBar.test.tsx +0 -0
  315. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/components/browser/__tests__/RecipeRow.test.tsx +0 -0
  316. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/components/browser/__tests__/RunCompareView.test.tsx +0 -0
  317. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/components/browser/__tests__/RunHistoryTab.test.tsx +0 -0
  318. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/components/browser/__tests__/StrategyRow.test.tsx +0 -0
  319. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/components/browser/__tests__/StrategySlidePanel.test.tsx +0 -0
  320. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/components/browser/__tests__/StrategyTable.test.tsx +0 -0
  321. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/components/browser/__tests__/StrategyTableFooter.test.tsx +0 -0
  322. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/components/browser/__tests__/SymbolCoverageTable.test.tsx +0 -0
  323. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/components/charts/AnnualReturnsBar.tsx +0 -0
  324. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/components/charts/AnnualSummaryTable.tsx +0 -0
  325. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/components/charts/CorrelationHeatmap.tsx +0 -0
  326. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/components/charts/DrawdownDetailChart.tsx +0 -0
  327. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/components/charts/HoldingPeriodChart.tsx +0 -0
  328. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/components/charts/MAEMFEScatter.tsx +0 -0
  329. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/components/charts/MonteCarloChart.tsx +0 -0
  330. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/components/charts/OptimizeHeatmap.tsx +0 -0
  331. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/components/charts/OptimizeScatter.tsx +0 -0
  332. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/components/charts/ReturnDistributionChart.tsx +0 -0
  333. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/components/charts/VaRChart.tsx +0 -0
  334. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/components/charts/WFOTimeline.tsx +0 -0
  335. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/components/charts/WeekdayPerformanceChart.tsx +0 -0
  336. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/components/charts/__tests__/AnnualSummaryTable.test.tsx +0 -0
  337. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/components/charts/__tests__/HoldingPeriodChart.test.tsx +0 -0
  338. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/components/charts/__tests__/MonteCarloChart.test.tsx +0 -0
  339. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/components/jobs/JobRunnerCard.tsx +0 -0
  340. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/components/live/LiveKpiRow.tsx +0 -0
  341. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/components/live/LivePositionsTable.tsx +0 -0
  342. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/components/live/LiveTab.tsx +0 -0
  343. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/components/live/SummaryCard.tsx +0 -0
  344. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/components/live/__tests__/LiveKpiRow.test.tsx +0 -0
  345. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/components/live/__tests__/LivePositionsTable.test.tsx +0 -0
  346. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/components/live/__tests__/LiveTab.test.tsx +0 -0
  347. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/components/live/__tests__/format.test.ts +0 -0
  348. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/components/live/format.ts +0 -0
  349. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/components/metrics/CarryAdjustedCard.tsx +0 -0
  350. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/components/metrics/CompareTable.tsx +0 -0
  351. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/components/metrics/ISOOSMetrics.tsx +0 -0
  352. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/components/metrics/MetricInfoTip.tsx +0 -0
  353. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/components/metrics/MetricsGrid.tsx +0 -0
  354. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/components/metrics/PortfolioComposer.tsx +0 -0
  355. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/components/metrics/RegimeBreakdownCards.tsx +0 -0
  356. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/components/metrics/SignalQualityBadge.tsx +0 -0
  357. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/components/metrics/SubperiodMetrics.tsx +0 -0
  358. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/components/metrics/__tests__/CompareTable.test.tsx +0 -0
  359. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/components/metrics/__tests__/MetricInfoTip.test.tsx +0 -0
  360. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/components/metrics/__tests__/MetricsGrid.hidden.test.tsx +0 -0
  361. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/components/metrics/__tests__/MetricsGrid.sentinel.test.tsx +0 -0
  362. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/components/metrics/__tests__/MetricsGrid.tooltip.test.tsx +0 -0
  363. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/components/metrics/__tests__/SignalQualityBadge.test.tsx +0 -0
  364. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/components/metrics/__tests__/SubperiodMetrics.test.tsx +0 -0
  365. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/components/metrics/__tests__/evaluateGood.test.ts +0 -0
  366. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/components/metrics/evaluate.ts +0 -0
  367. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/components/trades/TradeTable.tsx +0 -0
  368. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/components/trades/__tests__/TradeTable.test.tsx +0 -0
  369. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/components/tuning/DuplicateStrategyCard.tsx +0 -0
  370. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/components/tuning/TuningPanel.tsx +0 -0
  371. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/components/tuning/__tests__/DuplicateStrategyCard.test.tsx +0 -0
  372. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/components/tuning/__tests__/TuningPanel.test.tsx +0 -0
  373. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/constants/__tests__/metricDefinitions.test.ts +0 -0
  374. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/constants/helpLinks.ts +0 -0
  375. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/constants/metricDefinitions.ts +0 -0
  376. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/constants/runSource.ts +0 -0
  377. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/contexts/DashboardContext.tsx +0 -0
  378. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/contexts/dashboardConstants.ts +0 -0
  379. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/design/__tests__/definedTokens.test.ts +0 -0
  380. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/design/__tests__/noHardcodedColors.test.ts +0 -0
  381. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/design/__tests__/tokens.contrast.test.ts +0 -0
  382. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/design/a11y.css +0 -0
  383. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/design/primitives/Button.tsx +0 -0
  384. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/design/primitives/Card.tsx +0 -0
  385. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/design/primitives/ChartDataTable.tsx +0 -0
  386. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/design/primitives/Chip.tsx +0 -0
  387. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/design/primitives/ConfirmDialog.tsx +0 -0
  388. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/design/primitives/Divider.tsx +0 -0
  389. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/design/primitives/ErrorBanner.tsx +0 -0
  390. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/design/primitives/KeyValue.tsx +0 -0
  391. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/design/primitives/Loading.tsx +0 -0
  392. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/design/primitives/OverflowMenu.tsx +0 -0
  393. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/design/primitives/Pill.stories.tsx +0 -0
  394. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/design/primitives/Pill.tsx +0 -0
  395. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/design/primitives/SectionHeader.tsx +0 -0
  396. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/design/primitives/SortHeaderCell.tsx +0 -0
  397. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/design/primitives/Stat.stories.tsx +0 -0
  398. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/design/primitives/Stat.tsx +0 -0
  399. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/design/primitives/TabBar.tsx +0 -0
  400. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/design/primitives/Toolbar.tsx +0 -0
  401. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/design/primitives/__tests__/ChartDataTable.test.tsx +0 -0
  402. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/design/primitives/__tests__/ConfirmDialog.test.tsx +0 -0
  403. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/design/primitives/__tests__/ErrorBanner.test.tsx +0 -0
  404. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/design/primitives/__tests__/Loading.test.tsx +0 -0
  405. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/design/primitives/__tests__/OverflowMenu.test.tsx +0 -0
  406. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/design/primitives/__tests__/Pill.test.tsx +0 -0
  407. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/design/primitives/__tests__/SortHeaderCell.test.tsx +0 -0
  408. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/design/primitives/__tests__/TabBar.test.tsx +0 -0
  409. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/design/primitives/index.ts +0 -0
  410. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/design/primitives/srOnly.ts +0 -0
  411. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/design/tokens.css +0 -0
  412. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/design/useChartTheme.ts +0 -0
  413. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/hooks/__tests__/useDocumentTitle.test.tsx +0 -0
  414. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/hooks/__tests__/useEquityViewport.test.ts +0 -0
  415. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/hooks/__tests__/useFetchByKey.test.ts +0 -0
  416. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/hooks/__tests__/useJobRunner.test.tsx +0 -0
  417. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/hooks/__tests__/useLiveAvailability.test.tsx +0 -0
  418. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/hooks/__tests__/useOrphanRuns.test.tsx +0 -0
  419. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/hooks/__tests__/useRunBacktest.test.tsx +0 -0
  420. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/hooks/__tests__/useScrollRestoration.test.tsx +0 -0
  421. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/hooks/__tests__/useSparklineCache.test.tsx +0 -0
  422. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/hooks/__tests__/useStarredStrategies.test.ts +0 -0
  423. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/hooks/__tests__/useStrategyHistorical.test.tsx +0 -0
  424. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/hooks/__tests__/useStrategyList.test.tsx +0 -0
  425. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/hooks/__tests__/useSyncedTimeRange.test.tsx +0 -0
  426. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/hooks/__tests__/useTheme.test.tsx +0 -0
  427. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/hooks/__tests__/useViewerSettings.lang.test.tsx +0 -0
  428. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/hooks/__tests__/useViewerSettings.shared.test.tsx +0 -0
  429. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/hooks/useBacktestData.ts +0 -0
  430. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/hooks/useDebounce.ts +0 -0
  431. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/hooks/useDocumentTitle.ts +0 -0
  432. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/hooks/useEquityViewport.ts +0 -0
  433. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/hooks/useFetchByKey.ts +0 -0
  434. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/hooks/useIdeasList.ts +0 -0
  435. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/hooks/useJobRunner.ts +0 -0
  436. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/hooks/useLiveAvailability.ts +0 -0
  437. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/hooks/useLiveList.ts +0 -0
  438. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/hooks/useOrphanRuns.ts +0 -0
  439. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/hooks/useRecentStrategies.ts +0 -0
  440. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/hooks/useScrollRestoration.ts +0 -0
  441. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/hooks/useSparklineCache.ts +0 -0
  442. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/hooks/useStarredStrategies.ts +0 -0
  443. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/hooks/useStrategyHistorical.ts +0 -0
  444. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/hooks/useStrategyList.ts +0 -0
  445. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/hooks/useSyncedTimeRange.ts +0 -0
  446. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/hooks/useTheme.ts +0 -0
  447. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/i18n/__tests__/strings.test.ts +0 -0
  448. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/i18n/strings.ts +0 -0
  449. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/lib/__tests__/annualSummary.test.ts +0 -0
  450. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/lib/__tests__/benchmark.test.ts +0 -0
  451. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/lib/__tests__/bestSharpe.test.ts +0 -0
  452. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/lib/__tests__/correlation.test.ts +0 -0
  453. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/lib/__tests__/distribution.test.ts +0 -0
  454. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/lib/__tests__/drawdown.test.ts +0 -0
  455. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/lib/__tests__/errorMessage.test.ts +0 -0
  456. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/lib/__tests__/format.test.ts +0 -0
  457. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/lib/__tests__/holdingPeriod.test.ts +0 -0
  458. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/lib/__tests__/liveEquity.test.ts +0 -0
  459. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/lib/__tests__/metricLabel.test.ts +0 -0
  460. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/lib/__tests__/monteCarlo.properties.test.ts +0 -0
  461. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/lib/__tests__/monteCarlo.test.ts +0 -0
  462. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/lib/__tests__/optimizeHeatmap.test.ts +0 -0
  463. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/lib/__tests__/paramImportance.test.ts +0 -0
  464. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/lib/__tests__/portfolio.test.ts +0 -0
  465. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/lib/__tests__/recipes.test.ts +0 -0
  466. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/lib/__tests__/rolling.test.ts +0 -0
  467. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/lib/__tests__/searchParams.test.ts +0 -0
  468. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/lib/__tests__/searchStrategies.test.ts +0 -0
  469. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/lib/__tests__/sentinel.test.ts +0 -0
  470. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/lib/__tests__/shareCard.test.ts +0 -0
  471. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/lib/__tests__/shareCardMulti.test.ts +0 -0
  472. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/lib/__tests__/shareTweet.test.ts +0 -0
  473. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/lib/__tests__/subperiod.test.ts +0 -0
  474. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/lib/__tests__/symbolStats.test.ts +0 -0
  475. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/lib/__tests__/walkForward.test.ts +0 -0
  476. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/lib/__tests__/weekday.test.ts +0 -0
  477. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/lib/annualSummary.ts +0 -0
  478. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/lib/assetClass.ts +0 -0
  479. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/lib/benchmark.ts +0 -0
  480. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/lib/bestSharpe.ts +0 -0
  481. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/lib/correlation.ts +0 -0
  482. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/lib/csv.ts +0 -0
  483. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/lib/distribution.ts +0 -0
  484. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/lib/drawdown.ts +0 -0
  485. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/lib/errorMessage.ts +0 -0
  486. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/lib/exportPng.ts +0 -0
  487. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/lib/format.ts +0 -0
  488. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/lib/holdingPeriod.ts +0 -0
  489. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/lib/liveEquity.ts +0 -0
  490. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/lib/metricLabel.ts +0 -0
  491. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/lib/monteCarlo.ts +0 -0
  492. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/lib/optimizeHeatmap.ts +0 -0
  493. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/lib/paramImportance.ts +0 -0
  494. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/lib/portfolio.ts +0 -0
  495. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/lib/recipes.ts +0 -0
  496. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/lib/rolling.ts +0 -0
  497. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/lib/searchParams.ts +0 -0
  498. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/lib/searchStrategies.ts +0 -0
  499. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/lib/sentinel.ts +0 -0
  500. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/lib/shareCard.ts +0 -0
  501. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/lib/shareTweet.ts +0 -0
  502. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/lib/subperiod.ts +0 -0
  503. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/lib/symbolStats.ts +0 -0
  504. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/lib/walkForward.ts +0 -0
  505. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/lib/weekday.ts +0 -0
  506. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/main.tsx +0 -0
  507. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/mock/btData.ts +0 -0
  508. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/pages/BrowsePage.tsx +0 -0
  509. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/pages/ComparePage.tsx +0 -0
  510. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/pages/DetailPage.tsx +0 -0
  511. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/pages/IdeasPage.tsx +0 -0
  512. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/pages/LivePage.tsx +0 -0
  513. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/pages/MaintenancePage.tsx +0 -0
  514. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/pages/ReportPage.tsx +0 -0
  515. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/pages/RunsPage.tsx +0 -0
  516. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/pages/__tests__/BrowsePage.test.tsx +0 -0
  517. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/pages/__tests__/ComparePage.test.tsx +0 -0
  518. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/pages/__tests__/DetailPage.test.tsx +0 -0
  519. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/pages/__tests__/MaintenancePage.test.tsx +0 -0
  520. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/pages/__tests__/ReportPage.test.tsx +0 -0
  521. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/pages/__tests__/RunsPage.test.tsx +0 -0
  522. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/router.tsx +0 -0
  523. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/screens/BacktestScreen.stories.tsx +0 -0
  524. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/screens/BacktestScreen.tsx +0 -0
  525. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/screens/BrowseScreen.tsx +0 -0
  526. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/screens/CompareScreen.stories.tsx +0 -0
  527. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/screens/CompareScreen.tsx +0 -0
  528. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/screens/ISOOSScreen.tsx +0 -0
  529. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/screens/IdeasScreen.stories.tsx +0 -0
  530. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/screens/IdeasScreen.tsx +0 -0
  531. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/screens/LiveScreen.stories.tsx +0 -0
  532. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/screens/LiveScreen.tsx +0 -0
  533. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/screens/MaintenanceScreen.tsx +0 -0
  534. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/screens/OptimizeScreen.stories.tsx +0 -0
  535. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/screens/OptimizeScreen.tsx +0 -0
  536. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/screens/StrategyScreen.tsx +0 -0
  537. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/screens/WFOScreen.stories.tsx +0 -0
  538. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/screens/WFOScreen.tsx +0 -0
  539. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/screens/__tests__/BacktestScreen.test.tsx +0 -0
  540. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/screens/__tests__/CompareScreen.test.tsx +0 -0
  541. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/screens/__tests__/ISOOSScreen.test.tsx +0 -0
  542. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/screens/__tests__/LiveScreen.test.tsx +0 -0
  543. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/screens/__tests__/MaintenanceScreen.test.tsx +0 -0
  544. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/screens/__tests__/OptimizeScreen.test.tsx +0 -0
  545. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/screens/__tests__/WFOScreen.test.tsx +0 -0
  546. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/screens/strategy/SignalChartCard.tsx +0 -0
  547. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/test-setup.ts +0 -0
  548. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/tsconfig.app.json +0 -0
  549. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/tsconfig.e2e.json +0 -0
  550. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/tsconfig.json +0 -0
  551. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/tsconfig.node.json +0 -0
  552. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/vite.config.ts +0 -0
  553. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/lighthouserc.json +0 -0
  554. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/release.sh +0 -0
  555. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/samples/README.en.md +0 -0
  556. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/samples/README.md +0 -0
  557. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/samples/__init__.py +0 -0
  558. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/samples/_generators/__init__.py +0 -0
  559. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/samples/_generators/compatibility_matrix.py +0 -0
  560. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/samples/_generators/ideas_defs.py +0 -0
  561. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/samples/_generators/pseudo_backtest.py +0 -0
  562. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/samples/_generators/pseudo_grid.py +0 -0
  563. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/samples/_generators/pseudo_wfo.py +0 -0
  564. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/samples/_generators/strategy_defs.py +0 -0
  565. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/samples/_generators/synthetic_ohlcv.py +0 -0
  566. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/samples/_generators/writers.py +0 -0
  567. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/samples/build_samples.py +0 -0
  568. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/samples/sample-forge/data/ideas/ideas.json +0 -0
  569. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/samples/sample-forge/data/results/backtest_results.db +0 -0
  570. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/samples/sample-forge/data/strategies/bbands_breakout_v1.json +0 -0
  571. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/samples/sample-forge/data/strategies/donchian_turtle_v1.json +0 -0
  572. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/samples/sample-forge/data/strategies/ema_adx_macd_v1.json +0 -0
  573. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/samples/sample-forge/data/strategies/macd_crossover_v1.json +0 -0
  574. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/samples/sample-forge/data/strategies/range_reversion_v1.json +0 -0
  575. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/samples/sample-forge/data/strategies/rsi_reversion_v1.json +0 -0
  576. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/samples/sample-forge/data/strategies/sma_crossover_v1.json +0 -0
  577. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/samples/sample-forge/data/strategies/supertrend_adx_v1.json +0 -0
  578. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/samples/sample-forge/forge.yaml +0 -0
  579. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/scripts/compare_sqlite_dump.py +0 -0
  580. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/scripts/generate_openapi.py +0 -0
  581. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/scripts/generate_thirdparty_js.py +0 -0
  582. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/scripts/verify_build_artifacts.py +0 -0
  583. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/src/alpha_visualizer/app.py +0 -0
  584. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/src/alpha_visualizer/cli.py +0 -0
  585. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/src/alpha_visualizer/db.py +0 -0
  586. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/src/alpha_visualizer/dependencies.py +0 -0
  587. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/src/alpha_visualizer/errors.py +0 -0
  588. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/src/alpha_visualizer/forge_config.py +0 -0
  589. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/src/alpha_visualizer/log_sanitize.py +0 -0
  590. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/src/alpha_visualizer/repositories/__init__.py +0 -0
  591. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/src/alpha_visualizer/repositories/backtest_results.py +0 -0
  592. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/src/alpha_visualizer/repositories/ideas.py +0 -0
  593. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/src/alpha_visualizer/repositories/live.py +0 -0
  594. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/src/alpha_visualizer/repositories/optimization.py +0 -0
  595. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/src/alpha_visualizer/repositories/strategies.py +0 -0
  596. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/src/alpha_visualizer/routers/__init__.py +0 -0
  597. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/src/alpha_visualizer/routers/historical.py +0 -0
  598. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/src/alpha_visualizer/routers/ideas.py +0 -0
  599. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/src/alpha_visualizer/routers/jobs.py +0 -0
  600. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/src/alpha_visualizer/routers/live.py +0 -0
  601. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/src/alpha_visualizer/routers/maintenance.py +0 -0
  602. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/src/alpha_visualizer/routers/optimize.py +0 -0
  603. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/src/alpha_visualizer/routers/results.py +0 -0
  604. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/src/alpha_visualizer/routers/run.py +0 -0
  605. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/src/alpha_visualizer/routers/strategies.py +0 -0
  606. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/src/alpha_visualizer/routers/wfo.py +0 -0
  607. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/src/alpha_visualizer/schemas/__init__.py +0 -0
  608. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/src/alpha_visualizer/schemas/health.py +0 -0
  609. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/src/alpha_visualizer/schemas/historical.py +0 -0
  610. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/src/alpha_visualizer/schemas/ideas.py +0 -0
  611. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/src/alpha_visualizer/schemas/live.py +0 -0
  612. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/src/alpha_visualizer/schemas/maintenance.py +0 -0
  613. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/src/alpha_visualizer/schemas/optimize.py +0 -0
  614. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/src/alpha_visualizer/schemas/results.py +0 -0
  615. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/src/alpha_visualizer/schemas/strategies.py +0 -0
  616. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/src/alpha_visualizer/schemas/wfo.py +0 -0
  617. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/src/alpha_visualizer/services/__init__.py +0 -0
  618. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/src/alpha_visualizer/services/backtest.py +0 -0
  619. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/src/alpha_visualizer/services/forge_cli.py +0 -0
  620. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/src/alpha_visualizer/services/historical.py +0 -0
  621. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/src/alpha_visualizer/services/jobs.py +0 -0
  622. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/src/alpha_visualizer/services/live.py +0 -0
  623. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/src/alpha_visualizer/services/tuning.py +0 -0
  624. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/src/alpha_visualizer/services/walk_forward.py +0 -0
  625. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/src/alpha_visualizer/static/assets/SortHeaderCell-CetYtnjX.js +0 -0
  626. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/src/alpha_visualizer/static/assets/SortHeaderCell-CetYtnjX.js.map +0 -0
  627. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/src/alpha_visualizer/static/assets/fonts-DJsrEZjK.css +0 -0
  628. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/src/alpha_visualizer/static/assets/format-D0fEne3x.js +0 -0
  629. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/src/alpha_visualizer/static/assets/format-D0fEne3x.js.map +0 -0
  630. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/src/alpha_visualizer/static/assets/index-ngPg-0Y0.css +0 -0
  631. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/src/alpha_visualizer/static/assets/inter-tight-latin-400-normal-BLrFJfvD.woff +0 -0
  632. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/src/alpha_visualizer/static/assets/inter-tight-latin-400-normal-iW8qmuJY.woff2 +0 -0
  633. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/src/alpha_visualizer/static/assets/inter-tight-latin-500-normal-BFXNXuvF.woff2 +0 -0
  634. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/src/alpha_visualizer/static/assets/inter-tight-latin-500-normal-pobXraBK.woff +0 -0
  635. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/src/alpha_visualizer/static/assets/inter-tight-latin-600-normal-BgSTtRxb.woff2 +0 -0
  636. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/src/alpha_visualizer/static/assets/inter-tight-latin-600-normal-D7bG6gX1.woff +0 -0
  637. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/src/alpha_visualizer/static/assets/jetbrains-mono-latin-500-normal-BWZEU5yA.woff2 +0 -0
  638. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/src/alpha_visualizer/static/assets/jetbrains-mono-latin-500-normal-CJOVTJB7.woff +0 -0
  639. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/src/alpha_visualizer/static/assets/react-CuMkScR3.js +0 -0
  640. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/src/alpha_visualizer/static/assets/react-CuMkScR3.js.map +0 -0
  641. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/src/alpha_visualizer/static/assets/react-router-CU9OAEs1.js +0 -0
  642. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/src/alpha_visualizer/static/assets/react-router-CU9OAEs1.js.map +0 -0
  643. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/src/alpha_visualizer/static/assets/rolldown-runtime-C0phanGV.js +0 -0
  644. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/src/alpha_visualizer/static/assets/source-serif-4-latin-600-normal-DMD1h6_f.woff +0 -0
  645. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/src/alpha_visualizer/static/assets/source-serif-4-latin-600-normal-DouSKlru.woff2 +0 -0
  646. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/src/alpha_visualizer/static/assets/tv-D3Zm-VpQ.js +0 -0
  647. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/src/alpha_visualizer/static/assets/tv-D3Zm-VpQ.js.map +0 -0
  648. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/src/alpha_visualizer/static/assets/useDocumentTitle-DPighAM_.js +0 -0
  649. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/src/alpha_visualizer/static/assets/useDocumentTitle-DPighAM_.js.map +0 -0
  650. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/src/alpha_visualizer/static/assets/visx-HscrFEDZ.js +0 -0
  651. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/src/alpha_visualizer/static/assets/visx-HscrFEDZ.js.map +0 -0
  652. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/src/alpha_visualizer/static/favicon.svg +0 -0
  653. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/src/alpha_visualizer/static/icons.svg +0 -0
  654. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/tests/__init__.py +0 -0
  655. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/tests/conftest.py +0 -0
  656. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/tests/factories.py +0 -0
  657. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/tests/fixtures/build_e2e_fixture.py +0 -0
  658. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/tests/repositories/__init__.py +0 -0
  659. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/tests/repositories/test_backtest_results_repo.py +0 -0
  660. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/tests/repositories/test_ideas_reader.py +0 -0
  661. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/tests/repositories/test_live_repo.py +0 -0
  662. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/tests/repositories/test_optimization_repo.py +0 -0
  663. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/tests/repositories/test_strategies_repo.py +0 -0
  664. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/tests/routers/__init__.py +0 -0
  665. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/tests/routers/test_db_mode_write_paths.py +0 -0
  666. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/tests/routers/test_forge_yaml_integration.py +0 -0
  667. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/tests/routers/test_historical.py +0 -0
  668. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/tests/routers/test_ideas.py +0 -0
  669. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/tests/routers/test_jobs.py +0 -0
  670. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/tests/routers/test_live.py +0 -0
  671. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/tests/routers/test_maintenance.py +0 -0
  672. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/tests/routers/test_optimize.py +0 -0
  673. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/tests/routers/test_results.py +0 -0
  674. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/tests/routers/test_run.py +0 -0
  675. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/tests/routers/test_sparkline.py +0 -0
  676. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/tests/routers/test_strategies.py +0 -0
  677. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/tests/routers/test_strategies_source.py +0 -0
  678. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/tests/routers/test_strategy_duplicate.py +0 -0
  679. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/tests/routers/test_strategy_save.py +0 -0
  680. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/tests/routers/test_wfo.py +0 -0
  681. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/tests/samples/__init__.py +0 -0
  682. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/tests/samples/test_pseudo_backtest.py +0 -0
  683. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/tests/samples/test_pseudo_grid.py +0 -0
  684. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/tests/samples/test_pseudo_wfo.py +0 -0
  685. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/tests/samples/test_sample_forge.py +0 -0
  686. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/tests/samples/test_strategy_defs.py +0 -0
  687. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/tests/samples/test_synthetic_ohlcv.py +0 -0
  688. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/tests/samples/test_writers.py +0 -0
  689. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/tests/schemas/__init__.py +0 -0
  690. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/tests/schemas/test_schemas.py +0 -0
  691. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/tests/services/__init__.py +0 -0
  692. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/tests/services/test_backtest.py +0 -0
  693. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/tests/services/test_backtest_properties.py +0 -0
  694. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/tests/services/test_forge_cli.py +0 -0
  695. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/tests/services/test_forge_failure_translation.py +0 -0
  696. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/tests/services/test_historical.py +0 -0
  697. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/tests/services/test_jobs.py +0 -0
  698. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/tests/services/test_live.py +0 -0
  699. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/tests/services/test_tuning.py +0 -0
  700. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/tests/services/test_wfo.py +0 -0
  701. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/tests/test_app.py +0 -0
  702. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/tests/test_cli.py +0 -0
  703. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/tests/test_compare_sqlite_dump.py +0 -0
  704. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/tests/test_db.py +0 -0
  705. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/tests/test_dependencies.py +0 -0
  706. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/tests/test_errors.py +0 -0
  707. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/tests/test_forge_config.py +0 -0
  708. {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/tests/test_log_sanitize.py +0 -0
@@ -1,4 +1,4 @@
1
1
  # file: /home/runner/work/alpha-visualizer/alpha-visualizer/src/alpha_visualizer/__init__.py
2
2
  # hypothesis_version: 6.161.6
3
3
 
4
- ['1.3.2']
4
+ ['1.3.4']
@@ -11,6 +11,24 @@ alpha-visualizer の全バージョン変更履歴です。
11
11
  _(EN) Entries below are generated from Conventional Commits (Japanese). Group names: 新機能 = Features, バグ修正 = Bug fixes, リファクタリング = Refactoring, パフォーマンス改善 = Performance, ドキュメント = Docs, テスト = Tests, その他 = Chore. Breaking commits are tagged 破壊的変更._
12
12
 
13
13
 
14
+ ## [1.3.3] - 2026-08-01
15
+
16
+
17
+ ### 新機能
18
+
19
+ - エクイティチャートに系列凡例を追加する (#463)
20
+
21
+
22
+
23
+ ## [1.3.2] - 2026-08-01
24
+
25
+
26
+ ### 新機能
27
+
28
+ - EULA 未同意で forge が Abort した際に同意手順を案内する (#462)
29
+
30
+
31
+
14
32
  ## [1.3.1] - 2026-08-01
15
33
 
16
34
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: alpha-visualizer
3
- Version: 1.3.2
3
+ Version: 1.3.4
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
@@ -3,7 +3,7 @@
3
3
  "info": {
4
4
  "title": "alpha-visualizer",
5
5
  "description": "AlphaForge バックテスト結果の Web 可視化ツール",
6
- "version": "1.3.2"
6
+ "version": "1.3.4"
7
7
  },
8
8
  "paths": {
9
9
  "/api/results": {
@@ -45,6 +45,13 @@ export interface EquityOverlay {
45
45
  dashed?: boolean
46
46
  }
47
47
 
48
+ /** 凡例 1 件分。色・線種は対応する系列に実際に適用したものと同じ値を入れる。 */
49
+ interface SeriesLegendEntry {
50
+ label: string
51
+ color: string
52
+ dashed: boolean
53
+ }
54
+
48
55
  export interface EquityDrawdownPaneTVProps {
49
56
  equity: number[]
50
57
  dates: string[]
@@ -54,6 +61,11 @@ export interface EquityDrawdownPaneTVProps {
54
61
  showBenchmark?: boolean
55
62
  /** equity と並走する追加比較系列(issue の多系列比較・任意本数) */
56
63
  overlays?: EquityOverlay[]
64
+ /**
65
+ * 凡例に出す主系列(equity)の名前。主系列が何を指すかは画面ごとに違う
66
+ * (バックテスト = 戦略の成績 / ライブ = 実際の運用成績)ため呼び出し側が決める。
67
+ */
68
+ equityLabel?: string
57
69
  compact?: boolean
58
70
  /** レジーム背景バンドの元データ(issue #317) */
59
71
  regimeSeries?: RegimeSeries | null
@@ -78,6 +90,7 @@ export function EquityDrawdownPaneTV(props: EquityDrawdownPaneTVProps) {
78
90
  benchmark,
79
91
  showBenchmark = false,
80
92
  overlays,
93
+ equityLabel = 'Strategy',
81
94
  compact = false,
82
95
  regimeSeries,
83
96
  showRegime = false,
@@ -113,6 +126,22 @@ export function EquityDrawdownPaneTV(props: EquityDrawdownPaneTVProps) {
113
126
 
114
127
  const overlayCount = overlays?.length ?? 0
115
128
 
129
+ /**
130
+ * overlay のラベル → パレット位置。**系列の生成と凡例が共有する唯一の割り当て**。
131
+ *
132
+ * 色は配列位置ではなく**ラベル**で決める。配列位置で決めると、ラベルはそのままで
133
+ * 並び順だけ変わったときに系列の色が入れ替わり、線の色で系列を識別している画面では
134
+ * 同じものが別物に見える。ソート済みユニークラベルの位置を使うことで、並び替えに
135
+ * 対して安定させる。
136
+ *
137
+ * ここを 1 箇所に集約するのは、凡例が系列と別ロジックで色を決めると両者が食い違う
138
+ * ため(凡例の存在価値は色と系列名の対応付けだけにあり、ずれた凡例は無いより悪い)。
139
+ */
140
+ const overlayColorIndexByLabel = useMemo(() => {
141
+ const labels = [...new Set((overlays ?? []).map((o) => o.label))].sort()
142
+ return new Map(labels.map((label, idx) => [label, idx] as const))
143
+ }, [overlays])
144
+
116
145
  const { equityData, benchmarkData, overlayData, drawdownData, markers } = useMemo(() => {
117
146
  const conv = fromViewportPoints(points, overlayCount)
118
147
  const ddSlicedDates = points.map((p) => p.date.toISOString().slice(0, 10))
@@ -240,16 +269,8 @@ export function EquityDrawdownPaneTV(props: EquityDrawdownPaneTVProps) {
240
269
  }
241
270
  }
242
271
 
243
- // 色は配列位置ではなく**ラベル**で決める。配列位置で決めると、ラベルは
244
- // そのままで並び順だけ変わったときに系列の色が入れ替わり、線の色で系列を
245
- // 識別している画面では同じものが別物に見える。ソート済みユニークラベルの
246
- // 位置を使うことで、並び替えに対して安定させる。
247
- const colorIndexByLabel = new Map(
248
- [...wantedLabels].sort().map((label, idx) => [label, idx]),
249
- )
250
-
251
272
  wanted.forEach((overlay) => {
252
- const colorIndex = colorIndexByLabel.get(overlay.label) ?? 0
273
+ const colorIndex = overlayColorIndexByLabel.get(overlay.label) ?? 0
253
274
  const options = overlayLineOptions(theme, colorIndex, overlay.color, overlay.dashed)
254
275
  const existing = map.get(overlay.label)
255
276
  if (existing) {
@@ -258,7 +279,7 @@ export function EquityDrawdownPaneTV(props: EquityDrawdownPaneTVProps) {
258
279
  map.set(overlay.label, chart.addSeries(LineSeries, options, 0))
259
280
  }
260
281
  })
261
- }, [overlays, theme])
282
+ }, [overlays, overlayColorIndexByLabel, theme])
262
283
 
263
284
  // issue #317: レジーム背景バンドの attach/detach。
264
285
  // primitive は bands をクロージャに持つため、series/表示切替/テーマが変わったら
@@ -331,6 +352,50 @@ export function EquityDrawdownPaneTV(props: EquityDrawdownPaneTVProps) {
331
352
  )
332
353
 
333
354
  // 凡例は DOM 側に描く(canvas 内に描くとテキスト検索・SR 到達性が失われるため)
355
+
356
+ /**
357
+ * equity + 比較系列の凡例。
358
+ *
359
+ * 比較系列が 1 本も無い画面(IS/OOS・レポート)では線が equity 1 本しかなく、
360
+ * 凡例は操作行を圧迫するだけなので出さない。色・線種は系列に渡すオプションを
361
+ * そのまま引くので、系列側の色決定を変えても凡例が置き去りにならない。
362
+ */
363
+ const seriesLegend = useMemo<SeriesLegendEntry[]>(() => {
364
+ // 重複ラベルは系列側が label キーの Map で後勝ちに統合する。凡例だけ 2 件
365
+ // 並ぶと、描かれていない線が存在するように見えるので同じ規則で潰す。
366
+ const uniqueOverlays = [...new Map((overlays ?? []).map((o) => [o.label, o])).values()]
367
+ if (!showBenchmark && uniqueOverlays.length === 0) return []
368
+
369
+ const entries: SeriesLegendEntry[] = [
370
+ {
371
+ label: equityLabel,
372
+ color: equityAreaOptions(theme, isPositive).lineColor ?? theme.text3,
373
+ dashed: false,
374
+ },
375
+ ]
376
+ if (showBenchmark) {
377
+ entries.push({
378
+ label: 'Buy & Hold',
379
+ color: benchmarkLineOptions(theme).color ?? theme.text3,
380
+ dashed: true,
381
+ })
382
+ }
383
+ for (const overlay of uniqueOverlays) {
384
+ const options = overlayLineOptions(
385
+ theme,
386
+ overlayColorIndexByLabel.get(overlay.label) ?? 0,
387
+ overlay.color,
388
+ overlay.dashed,
389
+ )
390
+ entries.push({
391
+ label: overlay.label,
392
+ color: options.color ?? theme.text3,
393
+ dashed: Boolean(overlay.dashed),
394
+ })
395
+ }
396
+ return entries
397
+ }, [overlays, overlayColorIndexByLabel, showBenchmark, equityLabel, theme, isPositive])
398
+
334
399
  const regimeLegend = useMemo(() => {
335
400
  if (!showRegime || !regimeSeries) return []
336
401
  return createRegimeBandsPrimitive(regimeSeries, theme.series, REGIME_BAND_ALPHA).legend()
@@ -407,20 +472,33 @@ export function EquityDrawdownPaneTV(props: EquityDrawdownPaneTVProps) {
407
472
  >
408
473
  Log
409
474
  </button>
410
- {showBenchmark && (
475
+ {seriesLegend.length > 0 && (
411
476
  <div
477
+ data-testid="series-legend"
412
478
  style={{
413
479
  marginLeft: 12,
414
480
  display: 'flex',
415
481
  gap: 12,
416
482
  alignItems: 'center',
483
+ flexWrap: 'wrap',
417
484
  fontFamily: 'var(--mono)',
418
485
  fontSize: 'var(--fs-mono-sm)',
419
486
  color: 'var(--text3)',
420
487
  }}
421
488
  >
422
- <span style={{ color: theme.accent }}>━━ Strategy</span>
423
- <span>╌╌ Buy &amp; Hold</span>
489
+ {seriesLegend.map((e) => (
490
+ <span key={e.label} style={{ display: 'flex', alignItems: 'center', gap: 5 }}>
491
+ <span
492
+ data-testid={`series-legend-swatch-${e.label}`}
493
+ aria-hidden="true"
494
+ style={{
495
+ width: 16,
496
+ borderTop: `2px ${e.dashed ? 'dashed' : 'solid'} ${e.color}`,
497
+ }}
498
+ />
499
+ {e.label}
500
+ </span>
501
+ ))}
424
502
  </div>
425
503
  )}
426
504
  {regimeLegend.length > 0 && (
@@ -596,3 +596,115 @@ describe('EquityDrawdownPaneTV log scale (issue #378)', () => {
596
596
  )
597
597
  })
598
598
  })
599
+
600
+ /**
601
+ * 系列凡例。ライブ画面は overlays(指数・バックテスト)で 3 本の線を重ねて描くが、
602
+ * 凡例が無いためどの線が何かを判別できなかった。
603
+ */
604
+ describe('EquityDrawdownPaneTV series legend', () => {
605
+ const baseProps = {
606
+ lang: 'ja' as const,
607
+ equity: sampleEquity,
608
+ dates: sampleDates,
609
+ drawdown: sampleDrawdown,
610
+ isCutoffIdx: 15,
611
+ }
612
+
613
+ function overlayColors(): string[] {
614
+ return addSeriesMock.mock.calls
615
+ .filter((args) => (args as unknown[])[0] === 'LineSeriesDef')
616
+ .map((args) => ((args as unknown[])[1] as { color?: string }).color ?? '')
617
+ }
618
+
619
+ it('overlays の各ラベルを凡例に表示する', () => {
620
+ render(
621
+ <EquityDrawdownPaneTV
622
+ {...baseProps}
623
+ overlays={[
624
+ { label: '指数(Buy & Hold)', values: sampleEquity },
625
+ { label: 'バックテスト', values: sampleEquity, dashed: true },
626
+ ]}
627
+ />,
628
+ )
629
+ const legend = screen.getByTestId('series-legend')
630
+ expect(legend).toHaveTextContent('指数(Buy & Hold)')
631
+ expect(legend).toHaveTextContent('バックテスト')
632
+ })
633
+
634
+ it('凡例の色は実際に系列へ渡した色と一致する', () => {
635
+ // WHY: 凡例の存在価値は「線の色 → 系列名」の対応付けだけにある。色が
636
+ // 食い違った凡例は、無いより悪い(別系列を読み違えたまま判断される)。
637
+ // 実際、統合前の凡例は Strategy を theme.accent 固定で描いていたが、
638
+ // equity 線は success/danger で描かれており一致していなかった。
639
+ render(
640
+ <EquityDrawdownPaneTV
641
+ {...baseProps}
642
+ overlays={[
643
+ { label: 'QQQ', values: sampleEquity },
644
+ { label: 'BT', values: sampleEquity, dashed: true },
645
+ ]}
646
+ />,
647
+ )
648
+ const [qqqColor, btColor] = overlayColors()
649
+ expect(qqqColor).toBeTruthy()
650
+ expect(btColor).toBeTruthy()
651
+
652
+ const swatchOf = (label: string) =>
653
+ screen.getByTestId(`series-legend-swatch-${label}`)
654
+ expect(swatchOf('QQQ')).toHaveStyle({ borderTopColor: qqqColor })
655
+ expect(swatchOf('BT')).toHaveStyle({ borderTopColor: btColor })
656
+ // dashed 指定は線種としても凡例に反映する(色だけでは 2 系列を区別しにくい)
657
+ expect(swatchOf('BT')).toHaveStyle({ borderTopStyle: 'dashed' })
658
+ expect(swatchOf('QQQ')).toHaveStyle({ borderTopStyle: 'solid' })
659
+ })
660
+
661
+ it('主系列のラベルは equityLabel で差し替えられる', () => {
662
+ // WHY: 主系列が何かは画面ごとに違う(バックテスト = Strategy / ライブ = 実績)。
663
+ // 比較系列だけ名前が付いて主系列が無名だと、どれが自分の成績か分からない。
664
+ render(
665
+ <EquityDrawdownPaneTV
666
+ {...baseProps}
667
+ equityLabel="ライブ"
668
+ overlays={[{ label: 'QQQ', values: sampleEquity }]}
669
+ />,
670
+ )
671
+ expect(screen.getByTestId('series-legend')).toHaveTextContent('ライブ')
672
+ })
673
+
674
+ it('比較系列が無ければ凡例を出さない', () => {
675
+ // WHY: 線が 1 本しかない画面(IS/OOS・レポート)で凡例を出しても情報量は
676
+ // 増えず、チャート上部の操作行を圧迫するだけ。
677
+ render(<EquityDrawdownPaneTV {...baseProps} />)
678
+ expect(screen.queryByTestId('series-legend')).not.toBeInTheDocument()
679
+ })
680
+
681
+ it('showBenchmark 時は Buy & Hold を凡例に含む', () => {
682
+ render(
683
+ <EquityDrawdownPaneTV
684
+ {...baseProps}
685
+ benchmark={sampleEquity.map((v) => v * 0.9)}
686
+ showBenchmark
687
+ />,
688
+ )
689
+ const legend = screen.getByTestId('series-legend')
690
+ expect(legend).toHaveTextContent('Strategy')
691
+ expect(legend).toHaveTextContent('Buy & Hold')
692
+ })
693
+
694
+ it('重複ラベルの overlays は凡例にも 1 件だけ出す', () => {
695
+ // WHY: 系列側は label をキーにした Map で 1 本に統合される。凡例だけ 2 件
696
+ // 並ぶと、描かれていない線が存在するように見える。
697
+ const warn = vi.spyOn(console, 'warn').mockImplementation(() => {})
698
+ render(
699
+ <EquityDrawdownPaneTV
700
+ {...baseProps}
701
+ overlays={[
702
+ { label: 'QQQ', values: sampleEquity },
703
+ { label: 'QQQ', values: sampleEquity.map((v) => v * 2) },
704
+ ]}
705
+ />,
706
+ )
707
+ expect(screen.getAllByTestId('series-legend-swatch-QQQ')).toHaveLength(1)
708
+ warn.mockRestore()
709
+ })
710
+ })
@@ -78,10 +78,25 @@ function admitComparisonSeries(
78
78
  return series
79
79
  }
80
80
 
81
+ /**
82
+ * `ChartTheme.series`(accent / steel / moss / umber / mauve)における mauve の位置。
83
+ *
84
+ * 指数の色をパレット任せにすると、ラベルのソート順で 2 色目の steel が当たる。
85
+ * ライブ equity は success(緑 #4A723A)/ danger(赤)で描かれ、steel(#5B7A8C) は
86
+ * 緑と ΔE 44.6 しか離れていない(他の系列ペアは 67〜75)。明度も L* 49.5 vs 43.9 と
87
+ * 近いため、細い線では主系列と見分けられない。緑からも赤からも離れた mauve
88
+ * (ΔE 67.7)を固定で割り当てる。
89
+ */
90
+ const MAUVE_SERIES_INDEX = 4
91
+
81
92
  /** 許容済み系列(`admitComparisonSeries` 通過後)を overlay 形式に変換する。 */
82
- function toOverlay(label: string, series: [string, number][] | null): EquityOverlay | null {
93
+ function toOverlay(
94
+ label: string,
95
+ series: [string, number][] | null,
96
+ style?: Pick<EquityOverlay, 'color' | 'dashed'>,
97
+ ): EquityOverlay | null {
83
98
  if (!series) return null
84
- return { label, values: series.map(([, v]) => v) }
99
+ return { label, values: series.map(([, v]) => v), ...style }
85
100
  }
86
101
 
87
102
  /**
@@ -115,7 +130,13 @@ export function LivePositionView({ summary, warnings, lang }: Props): ReactEleme
115
130
  const acceptedBacktest = admitComparisonSeries(backtestLabel, summary.backtest_equity, values.length)
116
131
 
117
132
  const overlays: EquityOverlay[] = [
118
- toOverlay(benchmarkLabel, acceptedBenchmark),
133
+ // 指数だけは色と線種を明示する(理由は MAUVE_SERIES_INDEX のコメント)。
134
+ // 破線は色以外の手がかりでの区別も兼ねる(バックテスト画面の Buy & Hold と同じ扱い)
135
+ toOverlay(benchmarkLabel, acceptedBenchmark, {
136
+ color: theme.series[MAUVE_SERIES_INDEX],
137
+ dashed: true,
138
+ }),
139
+ // バックテストは既定パレット(accent 橙)のまま。equity の緑・赤とは十分離れている
119
140
  toOverlay(backtestLabel, acceptedBacktest),
120
141
  ].filter((o): o is EquityOverlay => o != null)
121
142
 
@@ -179,6 +200,9 @@ export function LivePositionView({ summary, warnings, lang }: Props): ReactEleme
179
200
  drawdown={drawdown}
180
201
  isCutoffIdx={0}
181
202
  overlays={overlays}
203
+ // 既定の 'Strategy' はバックテスト画面向けの名前。ここでの主系列は
204
+ // 実運用の成績なので、比較系列(指数・バックテスト)と取り違えない名前にする
205
+ equityLabel={L('ライブ', 'Live')}
182
206
  lang={lang}
183
207
  />
184
208
  </div>
@@ -125,6 +125,24 @@ describe('<LivePositionView /> assembly (Task 13)', () => {
125
125
  expect(props?.overlays).toEqual([])
126
126
  })
127
127
 
128
+ it('主系列の凡例ラベルを言語に応じて渡す', () => {
129
+ // WHY: ライブ画面は equity に指数・バックテストを重ねる。凡例の既定ラベルは
130
+ // 'Strategy'(バックテスト画面向け)なので、そのままだと主系列が「戦略の
131
+ // バックテスト曲線」に見え、実運用の成績と取り違える。
132
+ const summary = {
133
+ strategy_id: 'pf_1',
134
+ kind: 'position' as const,
135
+ metrics: {},
136
+ equity: [['2026-06-04T00:00:00', 1_000_000]],
137
+ } as unknown as LiveSummary
138
+
139
+ render(<LivePositionView summary={summary} warnings={[]} lang="ja" />)
140
+ expect(equityPaneProps.current?.equityLabel).toBe('ライブ')
141
+
142
+ render(<LivePositionView summary={summary} warnings={[]} lang="en" />)
143
+ expect(equityPaneProps.current?.equityLabel).toBe('Live')
144
+ })
145
+
128
146
  it('ベンチマークがあれば overlays に指数系列を equity と同じインデックスで積む', () => {
129
147
  const summary = {
130
148
  strategy_id: 'pf_1',
@@ -164,6 +182,44 @@ describe('<LivePositionView /> assembly (Task 13)', () => {
164
182
  expect(overlays[0]?.values).toEqual([1_000_000, 1_020_000])
165
183
  })
166
184
 
185
+ it('指数は主系列と混同しない色・線種を明示指定する', () => {
186
+ // WHY: ライブ equity は success(緑 #4A723A)/ danger(赤)で描かれる。
187
+ // overlay の色をパレット任せにすると、ラベルのソート順で 2 色目の
188
+ // steel(#5B7A8C) が指数に当たる。steel は緑と ΔE 44.6 しか離れておらず
189
+ // (他の系列ペアは 67〜75)、明度も L* 49.5 vs 43.9 と近いため、細い線では
190
+ // 見分けられない。緑からも赤からも離れた mauve を固定で割り当て、さらに
191
+ // 破線にして色以外の手がかりでも区別できるようにする。
192
+ const summary = {
193
+ strategy_id: 'pf_1',
194
+ kind: 'position' as const,
195
+ metrics: {},
196
+ equity: [
197
+ ['2026-06-04T00:00:00', 1_000_000],
198
+ ['2026-06-05T00:00:00', 995_000],
199
+ ] as [string, number][],
200
+ benchmark_equity: [
201
+ ['2026-06-04T00:00:00', 1_000_000],
202
+ ['2026-06-05T00:00:00', 1_020_000],
203
+ ] as [string, number][],
204
+ backtest_equity: [
205
+ ['2026-06-04T00:00:00', 1_000_000],
206
+ ['2026-06-05T00:00:00', 1_010_000],
207
+ ] as [string, number][],
208
+ } as unknown as LiveSummary
209
+
210
+ render(<LivePositionView summary={summary} warnings={[]} lang="ja" />)
211
+ const overlays = equityPaneProps.current?.overlays ?? []
212
+ const index = overlays.find((o) => o.label === '指数(Buy & Hold)')
213
+ const backtest = overlays.find((o) => o.label === 'バックテスト')
214
+
215
+ // mauve(ChartTheme.series の 5 色目)。steel が当たらないことが要点
216
+ expect(index?.color).toBe('#7B5380')
217
+ expect(index?.dashed).toBe(true)
218
+ // バックテストは既定パレット(accent 橙)のまま。緑とは十分離れている
219
+ expect(backtest?.color).toBeUndefined()
220
+ expect(backtest?.dashed).toBeFalsy()
221
+ })
222
+
167
223
  it('overlay で除外された系列は KPI の超過リターンにも使われない(Finding 1: チャートと KPI の判定を統一)', () => {
168
224
  // WHY: buildOverlay がチャート描画を弾く系列を、KPI 行(超過リターン)が
169
225
  // 生の summary.benchmark_equity / backtest_equity をそのまま受け取って
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "alpha-visualizer"
3
- version = "1.3.2"
3
+ version = "1.3.4"
4
4
  description = "Web visualization tool for AlphaForge backtest results"
5
5
  readme = "README.md"
6
6
  license = "Apache-2.0"
@@ -93,7 +93,7 @@ dev = [
93
93
  ]
94
94
 
95
95
  [tool.bumpversion]
96
- current_version = "1.3.2"
96
+ current_version = "1.3.4"
97
97
  commit = true
98
98
  message = "chore: バージョン {new_version} にバンプ"
99
99
  tag = true
@@ -1,3 +1,3 @@
1
1
  """alpha-visualizer: AlphaForge バックテスト結果の Web 可視化ツール"""
2
2
 
3
- __version__ = "1.3.2"
3
+ __version__ = "1.3.4"