alpha-visualizer 0.2.0__tar.gz → 0.3.0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (401) hide show
  1. {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/.agents/skills/source-command-audit-licenses/SKILL.md +1 -1
  2. {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/.claude/commands/audit-licenses.md +1 -1
  3. {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/.claude/commands/pre-release.md +15 -0
  4. {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/.github/PULL_REQUEST_TEMPLATE.md +5 -5
  5. {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/.github/workflows/ci.yml +39 -21
  6. {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/.github/workflows/lighthouse.yml +11 -6
  7. {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/.github/workflows/release.yml +10 -5
  8. alpha_visualizer-0.2.0/.hypothesis/constants/ac5661ce57db0685 → alpha_visualizer-0.3.0/.hypothesis/constants/7b2b6a48db4df50a +1 -1
  9. alpha_visualizer-0.2.0/.hypothesis/constants/cc9de77781f98ef2 → alpha_visualizer-0.3.0/.hypothesis/constants/dd2b62c354789905 +1 -1
  10. alpha_visualizer-0.3.0/CHANGELOG.md +371 -0
  11. {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/CLAUDE.md +48 -97
  12. {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/CONTRIBUTING.en.md +11 -11
  13. {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/CONTRIBUTING.md +11 -11
  14. {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/PKG-INFO +11 -9
  15. {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/README.en.md +10 -8
  16. {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/README.md +10 -8
  17. {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/SECURITY.en.md +3 -3
  18. {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/SECURITY.md +3 -3
  19. {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/THIRDPARTY_LICENSES.txt +27 -0
  20. {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/docs/adr/0003-openapi-typescript-codegen.md +9 -9
  21. alpha_visualizer-0.3.0/frontend/.npmrc +4 -0
  22. alpha_visualizer-0.3.0/frontend/.size-limit.json +20 -0
  23. {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/frontend/CLAUDE.md +2 -2
  24. {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/frontend/README.md +12 -9
  25. {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/frontend/THIRDPARTY_FONTS.md +1 -1
  26. {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/frontend/e2e/fixtures/README.md +1 -1
  27. alpha_visualizer-0.3.0/frontend/e2e/screenshots/equity-tv.spec.ts +55 -0
  28. {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/frontend/package.json +11 -3
  29. alpha_visualizer-0.3.0/frontend/pnpm-lock.yaml +4251 -0
  30. alpha_visualizer-0.3.0/frontend/pnpm-workspace.yaml +5 -0
  31. alpha_visualizer-0.3.0/frontend/src/charts/tv/CompareEquityTV.stories.tsx +101 -0
  32. alpha_visualizer-0.3.0/frontend/src/charts/tv/CompareEquityTV.tsx +189 -0
  33. alpha_visualizer-0.3.0/frontend/src/charts/tv/EquityDrawdownPaneTV.stories.tsx +134 -0
  34. alpha_visualizer-0.3.0/frontend/src/charts/tv/EquityDrawdownPaneTV.tsx +267 -0
  35. alpha_visualizer-0.3.0/frontend/src/charts/tv/RollingMetricsChartTV.stories.tsx +71 -0
  36. alpha_visualizer-0.3.0/frontend/src/charts/tv/RollingMetricsChartTV.tsx +142 -0
  37. alpha_visualizer-0.3.0/frontend/src/charts/tv/WFOEquityTV.stories.tsx +108 -0
  38. alpha_visualizer-0.3.0/frontend/src/charts/tv/WFOEquityTV.tsx +124 -0
  39. alpha_visualizer-0.3.0/frontend/src/charts/tv/__tests__/CompareEquityTV.test.tsx +105 -0
  40. alpha_visualizer-0.3.0/frontend/src/charts/tv/__tests__/EquityDrawdownPaneTV.test.tsx +203 -0
  41. alpha_visualizer-0.3.0/frontend/src/charts/tv/__tests__/RollingMetricsChartTV.test.tsx +97 -0
  42. alpha_visualizer-0.3.0/frontend/src/charts/tv/__tests__/WFOEquityTV.test.tsx +150 -0
  43. alpha_visualizer-0.3.0/frontend/src/charts/tv/__tests__/data.test.ts +124 -0
  44. alpha_visualizer-0.3.0/frontend/src/charts/tv/__tests__/theme.test.ts +94 -0
  45. alpha_visualizer-0.3.0/frontend/src/charts/tv/data.ts +117 -0
  46. alpha_visualizer-0.3.0/frontend/src/charts/tv/theme.ts +105 -0
  47. alpha_visualizer-0.3.0/frontend/src/constants/featureFlags.ts +84 -0
  48. {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/frontend/src/screens/BacktestScreen.tsx +180 -63
  49. {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/frontend/src/screens/CompareScreen.tsx +9 -2
  50. {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/frontend/src/screens/WFOScreen.tsx +18 -6
  51. {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/frontend/vite.config.ts +26 -11
  52. {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/pyproject.toml +3 -3
  53. {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/release.sh +15 -0
  54. {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/samples/README.en.md +3 -3
  55. {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/samples/README.md +3 -3
  56. {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/samples/build_samples.py +2 -2
  57. {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/src/alpha_visualizer/__init__.py +1 -1
  58. {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/src/alpha_visualizer/cli.py +3 -3
  59. {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/tests/samples/test_sample_forge.py +1 -1
  60. alpha_visualizer-0.3.0/tests/test_cli.py +52 -0
  61. {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/uv.lock +1 -1
  62. alpha_visualizer-0.2.0/CHANGELOG.md +0 -103
  63. alpha_visualizer-0.2.0/frontend/.npmrc +0 -1
  64. alpha_visualizer-0.2.0/frontend/package-lock.json +0 -6387
  65. alpha_visualizer-0.2.0/tests/test_cli.py +0 -30
  66. {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/.agents/skills/source-command-pre-release/SKILL.md +0 -0
  67. {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/.codex/hooks.json +0 -0
  68. {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/.github/ISSUE_TEMPLATE/bug_report.yml +0 -0
  69. {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/.github/ISSUE_TEMPLATE/bug_report_ja.yml +0 -0
  70. {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/.github/ISSUE_TEMPLATE/config.yml +0 -0
  71. {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/.github/ISSUE_TEMPLATE/feature_request.yml +0 -0
  72. {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/.github/ISSUE_TEMPLATE/feature_request_ja.yml +0 -0
  73. {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/.github/codeql/README.md +0 -0
  74. {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/.github/codeql/codeql-config.yml +0 -0
  75. {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/.github/dependabot.yml +0 -0
  76. {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/.github/workflows/codeql.yml +0 -0
  77. {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/.gitignore +0 -0
  78. {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/.hypothesis/.gitignore +0 -0
  79. {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/.hypothesis/constants/069853a4f8389a49 +0 -0
  80. {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/.hypothesis/constants/0a940b6ee0f389fc +0 -0
  81. {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/.hypothesis/constants/0b2de83fbd38f835 +0 -0
  82. {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/.hypothesis/constants/0bf3463e8f4751b8 +0 -0
  83. {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/.hypothesis/constants/150dfae7c64cc789 +0 -0
  84. {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/.hypothesis/constants/152293548dfa1dc4 +0 -0
  85. {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/.hypothesis/constants/291dc4c40995bea6 +0 -0
  86. {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/.hypothesis/constants/312a7aaf12a1fd47 +0 -0
  87. {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/.hypothesis/constants/331e194303817b32 +0 -0
  88. {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/.hypothesis/constants/3c70931be7dd2e4e +0 -0
  89. {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/.hypothesis/constants/3f7b61d4b4a660e1 +0 -0
  90. {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/.hypothesis/constants/4577b97f57a8a832 +0 -0
  91. {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/.hypothesis/constants/4a1c4d1532cab28e +0 -0
  92. {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/.hypothesis/constants/508b282112ab038e +0 -0
  93. {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/.hypothesis/constants/5c12d3619c3f5d5b +0 -0
  94. {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/.hypothesis/constants/757b1f8305546439 +0 -0
  95. {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/.hypothesis/constants/7aec89cee7c5a592 +0 -0
  96. {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/.hypothesis/constants/7d3b67d825fc154a +0 -0
  97. {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/.hypothesis/constants/7f90c9d611001617 +0 -0
  98. {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/.hypothesis/constants/828ed73d45fcee28 +0 -0
  99. {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/.hypothesis/constants/85f15eb28ea04389 +0 -0
  100. {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/.hypothesis/constants/89aaa48f251cd53d +0 -0
  101. {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/.hypothesis/constants/8add761403393fca +0 -0
  102. {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/.hypothesis/constants/96ca93165140d446 +0 -0
  103. {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/.hypothesis/constants/97982d8e7c8d4a95 +0 -0
  104. {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/.hypothesis/constants/a5b6e9cccb23f349 +0 -0
  105. {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/.hypothesis/constants/a636a4647020033d +0 -0
  106. {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/.hypothesis/constants/b5803992d2e76cf5 +0 -0
  107. {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/.hypothesis/constants/b76328deebb21ae6 +0 -0
  108. {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/.hypothesis/constants/b9ff5bcd3a53e3a7 +0 -0
  109. {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/.hypothesis/constants/c5349cb90ddc7968 +0 -0
  110. {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/.hypothesis/constants/c5f6cf064ffb412d +0 -0
  111. {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/.hypothesis/constants/c9814af66187059c +0 -0
  112. {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/.hypothesis/constants/da39a3ee5e6b4b0d +0 -0
  113. {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/.hypothesis/constants/e44a457d795e56c2 +0 -0
  114. {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/.hypothesis/constants/ea2d606acbfff989 +0 -0
  115. {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/.hypothesis/constants/ee487c54cd5ca7dc +0 -0
  116. {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/.hypothesis/constants/eed5e66c16ae84b8 +0 -0
  117. {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/.hypothesis/constants/f7c4a04c97c0daf8 +0 -0
  118. {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/.hypothesis/constants/fa443af6269a6e02 +0 -0
  119. {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/.hypothesis/constants/ff4517cbfe51fea1 +0 -0
  120. {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/AGENTS.md +0 -0
  121. {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/CODE_OF_CONDUCT.en.md +0 -0
  122. {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/CODE_OF_CONDUCT.md +0 -0
  123. {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/LICENSE +0 -0
  124. {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/cliff.toml +0 -0
  125. {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/docs/adr/0001-pages-vs-screens.md +0 -0
  126. {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/docs/adr/0002-charts-visx-vs-components.md +0 -0
  127. {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/docs/adr/0004-condition-node-discriminated-union.md +0 -0
  128. {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/docs/lighthouse-ci.md +0 -0
  129. {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/docs/screenshots/en/browse.png +0 -0
  130. {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/docs/screenshots/en/compare.png +0 -0
  131. {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/docs/screenshots/en/detail.png +0 -0
  132. {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/docs/screenshots/en/ideas.png +0 -0
  133. {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/docs/screenshots/en/optimize.png +0 -0
  134. {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/docs/screenshots/en/strategy.png +0 -0
  135. {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/docs/screenshots/ja/browse.png +0 -0
  136. {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/docs/screenshots/ja/compare.png +0 -0
  137. {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/docs/screenshots/ja/detail.png +0 -0
  138. {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/docs/screenshots/ja/ideas.png +0 -0
  139. {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/docs/screenshots/ja/optimize.png +0 -0
  140. {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/docs/screenshots/ja/strategy.png +0 -0
  141. {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/frontend/.gitignore +0 -0
  142. {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/frontend/.storybook/main.ts +0 -0
  143. {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/frontend/.storybook/preview.ts +0 -0
  144. {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/frontend/e2e/fixtures/forge/data/ideas/ideas.json +0 -0
  145. {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/frontend/e2e/fixtures/forge/data/results/backtest_results.db +0 -0
  146. {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/frontend/e2e/fixtures/forge/data/strategies/momo_breakout.json +0 -0
  147. {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/frontend/e2e/fixtures/forge/data/strategies/rsi_reversal.json +0 -0
  148. {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/frontend/e2e/fixtures/forge/data/strategies/sma_cross.json +0 -0
  149. {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/frontend/e2e/fixtures/forge/forge.yaml +0 -0
  150. {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/frontend/e2e/helpers/locators.ts +0 -0
  151. {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/frontend/e2e/samples/sample-fixture.spec.ts +0 -0
  152. {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/frontend/e2e/screenshots/capture.spec.ts +0 -0
  153. {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/frontend/e2e/specs/browse.spec.ts +0 -0
  154. {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/frontend/e2e/specs/compare.spec.ts +0 -0
  155. {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/frontend/e2e/specs/detail.spec.ts +0 -0
  156. {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/frontend/e2e/specs/i18n.spec.ts +0 -0
  157. {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/frontend/eslint.config.js +0 -0
  158. {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/frontend/index.html +0 -0
  159. {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/frontend/openapi.json +0 -0
  160. {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/frontend/playwright.config.ts +0 -0
  161. {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/frontend/playwright.samples.config.ts +0 -0
  162. {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/frontend/playwright.screenshots.config.ts +0 -0
  163. {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/frontend/public/favicon.svg +0 -0
  164. {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/frontend/public/icons.svg +0 -0
  165. {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/frontend/src/api/client.ts +0 -0
  166. {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/frontend/src/api/types.gen.ts +0 -0
  167. {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/frontend/src/api/types.ts +0 -0
  168. {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/frontend/src/charts/visx/AnnualReturnsBarV.tsx +0 -0
  169. {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/frontend/src/charts/visx/CompareEquityV.tsx +0 -0
  170. {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/frontend/src/charts/visx/CorrelationHeatmapV.tsx +0 -0
  171. {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/frontend/src/charts/visx/DrawdownChartV.tsx +0 -0
  172. {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/frontend/src/charts/visx/EquityChartV.tsx +0 -0
  173. {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/frontend/src/charts/visx/MAEMFEScatterV.tsx +0 -0
  174. {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/frontend/src/charts/visx/MonthlyHeatmapV.tsx +0 -0
  175. {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/frontend/src/charts/visx/OptimizeScatterV.tsx +0 -0
  176. {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/frontend/src/charts/visx/Sparkline.stories.tsx +0 -0
  177. {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/frontend/src/charts/visx/Sparkline.tsx +0 -0
  178. {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/frontend/src/charts/visx/__tests__/EquityChartV.regime.test.ts +0 -0
  179. {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/frontend/src/charts/visx/regimeBands.ts +0 -0
  180. {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/frontend/src/components/CommandPalette.tsx +0 -0
  181. {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/frontend/src/components/DetailToolbar.tsx +0 -0
  182. {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/frontend/src/components/MetricsSummaryBarV2.stories.tsx +0 -0
  183. {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/frontend/src/components/MetricsSummaryBarV2.tsx +0 -0
  184. {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/frontend/src/components/RootLayout.tsx +0 -0
  185. {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/frontend/src/components/SettingsToggles.tsx +0 -0
  186. {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/frontend/src/components/StrategyHero.tsx +0 -0
  187. {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/frontend/src/components/__tests__/CommandPalette.test.tsx +0 -0
  188. {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/frontend/src/components/__tests__/CorrelationHeatmap.test.tsx +0 -0
  189. {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/frontend/src/components/__tests__/responsive-styles.test.tsx +0 -0
  190. {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/frontend/src/components/browser/CompareFloatingBar.tsx +0 -0
  191. {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/frontend/src/components/browser/FilterBar.tsx +0 -0
  192. {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/frontend/src/components/browser/GroupByToggle.tsx +0 -0
  193. {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/frontend/src/components/browser/Heroline.tsx +0 -0
  194. {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/frontend/src/components/browser/RunHistoryTab.tsx +0 -0
  195. {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/frontend/src/components/browser/SavedViews.tsx +0 -0
  196. {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/frontend/src/components/browser/StrategySlidePanel.tsx +0 -0
  197. {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/frontend/src/components/browser/StrategyTable.tsx +0 -0
  198. {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/frontend/src/components/browser/SymbolAtlas.tsx +0 -0
  199. {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/frontend/src/components/browser/SymbolCard.tsx +0 -0
  200. {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/frontend/src/components/charts/AnnualReturnsBar.tsx +0 -0
  201. {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/frontend/src/components/charts/CorrelationHeatmap.tsx +0 -0
  202. {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/frontend/src/components/charts/DrawdownDetailChart.tsx +0 -0
  203. {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/frontend/src/components/charts/MAEMFEScatter.tsx +0 -0
  204. {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/frontend/src/components/charts/MonteCarloChart.tsx +0 -0
  205. {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/frontend/src/components/charts/OptimizeScatter.tsx +0 -0
  206. {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/frontend/src/components/charts/ReturnDistributionChart.tsx +0 -0
  207. {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/frontend/src/components/charts/RollingMetricsChart.tsx +0 -0
  208. {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/frontend/src/components/charts/VaRChart.tsx +0 -0
  209. {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/frontend/src/components/charts/WFOTimeline.tsx +0 -0
  210. {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/frontend/src/components/charts/WeekdayPerformanceChart.tsx +0 -0
  211. {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/frontend/src/components/live/LiveTab.tsx +0 -0
  212. {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/frontend/src/components/live/__tests__/LiveTab.test.tsx +0 -0
  213. {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/frontend/src/components/live/__tests__/format.test.ts +0 -0
  214. {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/frontend/src/components/live/format.ts +0 -0
  215. {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/frontend/src/components/metrics/CompareTable.tsx +0 -0
  216. {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/frontend/src/components/metrics/ISOOSMetrics.tsx +0 -0
  217. {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/frontend/src/components/metrics/MetricsGrid.tsx +0 -0
  218. {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/frontend/src/components/metrics/RegimeBreakdownCards.tsx +0 -0
  219. {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/frontend/src/components/metrics/SignalQualityBadge.tsx +0 -0
  220. {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/frontend/src/components/metrics/__tests__/evaluateGood.test.ts +0 -0
  221. {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/frontend/src/components/metrics/evaluate.ts +0 -0
  222. {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/frontend/src/components/nav.ts +0 -0
  223. {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/frontend/src/components/trades/TradeTable.tsx +0 -0
  224. {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/frontend/src/constants/metricDefinitions.ts +0 -0
  225. {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/frontend/src/contexts/DashboardContext.tsx +0 -0
  226. {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/frontend/src/contexts/dashboardConstants.ts +0 -0
  227. {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/frontend/src/design/a11y.css +0 -0
  228. {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/frontend/src/design/primitives/Button.tsx +0 -0
  229. {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/frontend/src/design/primitives/Card.tsx +0 -0
  230. {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/frontend/src/design/primitives/Chip.tsx +0 -0
  231. {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/frontend/src/design/primitives/Divider.tsx +0 -0
  232. {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/frontend/src/design/primitives/KeyValue.tsx +0 -0
  233. {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/frontend/src/design/primitives/OverflowMenu.tsx +0 -0
  234. {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/frontend/src/design/primitives/Pill.stories.tsx +0 -0
  235. {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/frontend/src/design/primitives/Pill.tsx +0 -0
  236. {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/frontend/src/design/primitives/SectionHeader.tsx +0 -0
  237. {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/frontend/src/design/primitives/Stat.stories.tsx +0 -0
  238. {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/frontend/src/design/primitives/Stat.tsx +0 -0
  239. {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/frontend/src/design/primitives/TabBar.tsx +0 -0
  240. {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/frontend/src/design/primitives/Toolbar.tsx +0 -0
  241. {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/frontend/src/design/primitives/__tests__/OverflowMenu.test.tsx +0 -0
  242. {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/frontend/src/design/primitives/index.ts +0 -0
  243. {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/frontend/src/design/tokens.css +0 -0
  244. {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/frontend/src/design/useChartTheme.ts +0 -0
  245. {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/frontend/src/hooks/__tests__/useEquityViewport.test.ts +0 -0
  246. {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/frontend/src/hooks/__tests__/useFetchByKey.test.ts +0 -0
  247. {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/frontend/src/hooks/__tests__/useScrollRestoration.test.tsx +0 -0
  248. {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/frontend/src/hooks/__tests__/useStrategyList.test.tsx +0 -0
  249. {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/frontend/src/hooks/__tests__/useTheme.test.tsx +0 -0
  250. {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/frontend/src/hooks/useBacktestData.ts +0 -0
  251. {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/frontend/src/hooks/useDebounce.ts +0 -0
  252. {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/frontend/src/hooks/useEquityViewport.ts +0 -0
  253. {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/frontend/src/hooks/useFetchByKey.ts +0 -0
  254. {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/frontend/src/hooks/useIdeasList.ts +0 -0
  255. {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/frontend/src/hooks/useRecentStrategies.ts +0 -0
  256. {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/frontend/src/hooks/useScrollRestoration.ts +0 -0
  257. {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/frontend/src/hooks/useSparklineCache.ts +0 -0
  258. {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/frontend/src/hooks/useStrategyList.ts +0 -0
  259. {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/frontend/src/hooks/useSymbolStats.ts +0 -0
  260. {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/frontend/src/hooks/useTheme.ts +0 -0
  261. {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/frontend/src/i18n/__tests__/strings.test.ts +0 -0
  262. {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/frontend/src/i18n/strings.ts +0 -0
  263. {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/frontend/src/lib/__tests__/correlation.test.ts +0 -0
  264. {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/frontend/src/lib/__tests__/distribution.test.ts +0 -0
  265. {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/frontend/src/lib/__tests__/drawdown.test.ts +0 -0
  266. {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/frontend/src/lib/__tests__/format.test.ts +0 -0
  267. {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/frontend/src/lib/__tests__/monteCarlo.properties.test.ts +0 -0
  268. {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/frontend/src/lib/__tests__/monteCarlo.test.ts +0 -0
  269. {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/frontend/src/lib/__tests__/rolling.test.ts +0 -0
  270. {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/frontend/src/lib/__tests__/searchParams.test.ts +0 -0
  271. {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/frontend/src/lib/__tests__/searchStrategies.test.ts +0 -0
  272. {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/frontend/src/lib/__tests__/walkForward.test.ts +0 -0
  273. {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/frontend/src/lib/__tests__/weekday.test.ts +0 -0
  274. {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/frontend/src/lib/assetClass.ts +0 -0
  275. {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/frontend/src/lib/correlation.ts +0 -0
  276. {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/frontend/src/lib/csv.ts +0 -0
  277. {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/frontend/src/lib/distribution.ts +0 -0
  278. {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/frontend/src/lib/drawdown.ts +0 -0
  279. {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/frontend/src/lib/exportPng.ts +0 -0
  280. {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/frontend/src/lib/format.ts +0 -0
  281. {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/frontend/src/lib/monteCarlo.ts +0 -0
  282. {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/frontend/src/lib/rolling.ts +0 -0
  283. {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/frontend/src/lib/searchParams.ts +0 -0
  284. {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/frontend/src/lib/searchStrategies.ts +0 -0
  285. {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/frontend/src/lib/walkForward.ts +0 -0
  286. {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/frontend/src/lib/weekday.ts +0 -0
  287. {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/frontend/src/main.tsx +0 -0
  288. {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/frontend/src/mock/btData.ts +0 -0
  289. {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/frontend/src/pages/BrowsePage.tsx +0 -0
  290. {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/frontend/src/pages/ComparePage.tsx +0 -0
  291. {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/frontend/src/pages/DetailPage.tsx +0 -0
  292. {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/frontend/src/pages/IdeasPage.tsx +0 -0
  293. {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/frontend/src/router.tsx +0 -0
  294. {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/frontend/src/screens/BacktestScreen.stories.tsx +0 -0
  295. {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/frontend/src/screens/BrowseScreen.tsx +0 -0
  296. {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/frontend/src/screens/CompareScreen.stories.tsx +0 -0
  297. {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/frontend/src/screens/ISOOSScreen.tsx +0 -0
  298. {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/frontend/src/screens/IdeasScreen.stories.tsx +0 -0
  299. {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/frontend/src/screens/IdeasScreen.tsx +0 -0
  300. {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/frontend/src/screens/OptimizeScreen.stories.tsx +0 -0
  301. {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/frontend/src/screens/OptimizeScreen.tsx +0 -0
  302. {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/frontend/src/screens/StrategyScreen.tsx +0 -0
  303. {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/frontend/src/screens/WFOScreen.stories.tsx +0 -0
  304. {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/frontend/src/test-setup.ts +0 -0
  305. {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/frontend/tsconfig.app.json +0 -0
  306. {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/frontend/tsconfig.e2e.json +0 -0
  307. {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/frontend/tsconfig.json +0 -0
  308. {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/frontend/tsconfig.node.json +0 -0
  309. {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/lighthouserc.json +0 -0
  310. {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/samples/__init__.py +0 -0
  311. {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/samples/_generators/__init__.py +0 -0
  312. {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/samples/_generators/compatibility_matrix.py +0 -0
  313. {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/samples/_generators/ideas_defs.py +0 -0
  314. {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/samples/_generators/pseudo_backtest.py +0 -0
  315. {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/samples/_generators/pseudo_grid.py +0 -0
  316. {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/samples/_generators/pseudo_wfo.py +0 -0
  317. {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/samples/_generators/strategy_defs.py +0 -0
  318. {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/samples/_generators/synthetic_ohlcv.py +0 -0
  319. {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/samples/_generators/writers.py +0 -0
  320. {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/samples/sample-forge/data/ideas/ideas.json +0 -0
  321. {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/samples/sample-forge/data/results/backtest_results.db +0 -0
  322. {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/samples/sample-forge/data/strategies/bbands_breakout_v1.json +0 -0
  323. {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/samples/sample-forge/data/strategies/donchian_turtle_v1.json +0 -0
  324. {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/samples/sample-forge/data/strategies/ema_adx_macd_v1.json +0 -0
  325. {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/samples/sample-forge/data/strategies/macd_crossover_v1.json +0 -0
  326. {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/samples/sample-forge/data/strategies/range_reversion_v1.json +0 -0
  327. {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/samples/sample-forge/data/strategies/rsi_reversion_v1.json +0 -0
  328. {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/samples/sample-forge/data/strategies/sma_crossover_v1.json +0 -0
  329. {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/samples/sample-forge/data/strategies/supertrend_adx_v1.json +0 -0
  330. {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/samples/sample-forge/forge.yaml +0 -0
  331. {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/scripts/generate_openapi.py +0 -0
  332. {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/src/alpha_visualizer/app.py +0 -0
  333. {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/src/alpha_visualizer/db.py +0 -0
  334. {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/src/alpha_visualizer/dependencies.py +0 -0
  335. {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/src/alpha_visualizer/errors.py +0 -0
  336. {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/src/alpha_visualizer/forge_config.py +0 -0
  337. {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/src/alpha_visualizer/log_sanitize.py +0 -0
  338. {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/src/alpha_visualizer/repositories/__init__.py +0 -0
  339. {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/src/alpha_visualizer/repositories/backtest_results.py +0 -0
  340. {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/src/alpha_visualizer/repositories/ideas.py +0 -0
  341. {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/src/alpha_visualizer/repositories/live.py +0 -0
  342. {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/src/alpha_visualizer/repositories/optimization.py +0 -0
  343. {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/src/alpha_visualizer/repositories/strategies.py +0 -0
  344. {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/src/alpha_visualizer/routers/__init__.py +0 -0
  345. {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/src/alpha_visualizer/routers/ideas.py +0 -0
  346. {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/src/alpha_visualizer/routers/live.py +0 -0
  347. {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/src/alpha_visualizer/routers/optimize.py +0 -0
  348. {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/src/alpha_visualizer/routers/results.py +0 -0
  349. {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/src/alpha_visualizer/routers/run.py +0 -0
  350. {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/src/alpha_visualizer/routers/strategies.py +0 -0
  351. {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/src/alpha_visualizer/routers/wfo.py +0 -0
  352. {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/src/alpha_visualizer/schemas/__init__.py +0 -0
  353. {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/src/alpha_visualizer/schemas/ideas.py +0 -0
  354. {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/src/alpha_visualizer/schemas/live.py +0 -0
  355. {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/src/alpha_visualizer/schemas/optimize.py +0 -0
  356. {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/src/alpha_visualizer/schemas/results.py +0 -0
  357. {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/src/alpha_visualizer/schemas/strategies.py +0 -0
  358. {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/src/alpha_visualizer/schemas/wfo.py +0 -0
  359. {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/src/alpha_visualizer/services/__init__.py +0 -0
  360. {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/src/alpha_visualizer/services/backtest.py +0 -0
  361. {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/src/alpha_visualizer/services/live.py +0 -0
  362. {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/src/alpha_visualizer/services/walk_forward.py +0 -0
  363. {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/tests/__init__.py +0 -0
  364. {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/tests/conftest.py +0 -0
  365. {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/tests/factories.py +0 -0
  366. {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/tests/fixtures/build_e2e_fixture.py +0 -0
  367. {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/tests/repositories/__init__.py +0 -0
  368. {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/tests/repositories/test_backtest_results_repo.py +0 -0
  369. {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/tests/repositories/test_ideas_reader.py +0 -0
  370. {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/tests/repositories/test_live_repo.py +0 -0
  371. {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/tests/repositories/test_optimization_repo.py +0 -0
  372. {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/tests/repositories/test_strategies_repo.py +0 -0
  373. {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/tests/routers/__init__.py +0 -0
  374. {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/tests/routers/test_forge_yaml_integration.py +0 -0
  375. {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/tests/routers/test_ideas.py +0 -0
  376. {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/tests/routers/test_live.py +0 -0
  377. {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/tests/routers/test_optimize.py +0 -0
  378. {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/tests/routers/test_results.py +0 -0
  379. {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/tests/routers/test_run.py +0 -0
  380. {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/tests/routers/test_strategies.py +0 -0
  381. {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/tests/routers/test_wfo.py +0 -0
  382. {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/tests/samples/__init__.py +0 -0
  383. {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/tests/samples/test_pseudo_backtest.py +0 -0
  384. {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/tests/samples/test_pseudo_grid.py +0 -0
  385. {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/tests/samples/test_pseudo_wfo.py +0 -0
  386. {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/tests/samples/test_strategy_defs.py +0 -0
  387. {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/tests/samples/test_synthetic_ohlcv.py +0 -0
  388. {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/tests/samples/test_writers.py +0 -0
  389. {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/tests/schemas/__init__.py +0 -0
  390. {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/tests/schemas/test_schemas.py +0 -0
  391. {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/tests/services/__init__.py +0 -0
  392. {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/tests/services/test_backtest.py +0 -0
  393. {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/tests/services/test_backtest_properties.py +0 -0
  394. {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/tests/services/test_live.py +0 -0
  395. {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/tests/services/test_wfo.py +0 -0
  396. {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/tests/test_app.py +0 -0
  397. {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/tests/test_db.py +0 -0
  398. {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/tests/test_dependencies.py +0 -0
  399. {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/tests/test_errors.py +0 -0
  400. {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/tests/test_forge_config.py +0 -0
  401. {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/tests/test_log_sanitize.py +0 -0
@@ -177,4 +177,4 @@ Step 1・Step 2 で問題がなければ以下を実行する。
177
177
  - Python の仮想環境(`.venv`)が存在し `uv sync` 済みであることを前提とする。
178
178
  - `pip-licenses` と `prettytable` はこのコマンド専用の監査ツールであり、`pyproject.toml` の
179
179
  依存には含めない(`uv pip install` で都度インストールする)。
180
- - フロントエンドの `node_modules/` が存在しない場合は `npm install` を先に実行すること。
180
+ - フロントエンドの `node_modules/` が存在しない場合は `pnpm install` を先に実行すること。
@@ -173,4 +173,4 @@ Step 1・Step 2 で問題がなければ以下を実行する。
173
173
  - Python の仮想環境(`.venv`)が存在し `uv sync` 済みであることを前提とする。
174
174
  - `pip-licenses` と `prettytable` はこのコマンド専用の監査ツールであり、`pyproject.toml` の
175
175
  依存には含めない(`uv pip install` で都度インストールする)。
176
- - フロントエンドの `node_modules/` が存在しない場合は `npm install` を先に実行すること。
176
+ - フロントエンドの `node_modules/` が存在しない場合は `pnpm install` を先に実行すること。
@@ -56,6 +56,18 @@ alpha-visualizer のリリース前にテスト・Lint を実行して検証し
56
56
  # バージョンを bump してコミット・タグ
57
57
  uv run bump-my-version bump ${PART}
58
58
 
59
+ # uv.lock 内の自己バージョンを追従させ、差分が出たら bump commit に取り込む
60
+ # (bump-my-version は pyproject.toml と __init__.py だけ更新するため、
61
+ # このステップを省くと uv.lock の自己バージョンが drift する)
62
+ NEW_VERSION=$(grep '^version' pyproject.toml | grep -oE '[0-9]+\.[0-9]+\.[0-9]+')
63
+ uv lock
64
+ if [[ -n "$(git status --porcelain uv.lock)" ]]; then
65
+ git tag -d "v${NEW_VERSION}"
66
+ git add uv.lock
67
+ git commit --amend --no-edit
68
+ git tag -a "v${NEW_VERSION}" -m "v${NEW_VERSION}"
69
+ fi
70
+
59
71
  # PyPI に公開
60
72
  uv build
61
73
  uv publish
@@ -65,9 +77,12 @@ alpha-visualizer のリリース前にテスト・Lint を実行して検証し
65
77
  git push
66
78
  ```
67
79
 
80
+ `release.sh` を使う場合はこれらをまとめて実行できる(`bash release.sh [patch|minor|major]`)。
81
+
68
82
  ## 注意
69
83
 
70
84
  - `git push --tags` と `uv publish` は不可逆な操作のため、実行前に必ずユーザーの承認を取ること。
71
85
  - `bump-my-version` が必要(`uv sync --all-groups` で導入済みのはず)。
72
86
  - PyPI 認証情報(`UV_PUBLISH_TOKEN` 等)が設定されていること。
73
87
  - リリース前に `/audit-licenses` を実行して `THIRDPARTY_LICENSES.txt` を最新化すること。
88
+ - bump 直後の `uv lock` ステップは省略しないこと。省略すると `uv.lock` 内の自己バージョン文字列が旧バージョンのまま取り残され、リリース後に lock drift が発生する。
@@ -37,11 +37,11 @@ Closes #
37
37
 
38
38
  - [ ] バックエンドテスト: `uv run pytest tests/ -v`
39
39
  - [ ] バックエンド Lint: `uv run ruff check src/ tests/`
40
- - [ ] フロントエンドテスト: `cd frontend && npm run test:ci`
41
- - [ ] フロントエンド Lint: `cd frontend && npm run lint`
42
- - [ ] フロントエンドビルド: `cd frontend && npm run build`
43
- - [ ] E2E(UI 変更時): `cd frontend && npm run e2e`
44
- - [ ] スクリーンショット再撮影(UI 変更時): `cd frontend && npm run screenshots`
40
+ - [ ] フロントエンドテスト: `cd frontend && pnpm run test:ci`
41
+ - [ ] フロントエンド Lint: `cd frontend && pnpm run lint`
42
+ - [ ] フロントエンドビルド: `cd frontend && pnpm run build`
43
+ - [ ] E2E(UI 変更時): `cd frontend && pnpm run e2e`
44
+ - [ ] スクリーンショット再撮影(UI 変更時): `cd frontend && pnpm run screenshots`
45
45
 
46
46
  ## スクリーンショット / Screenshots
47
47
 
@@ -37,24 +37,32 @@ jobs:
37
37
  steps:
38
38
  - uses: actions/checkout@v6
39
39
 
40
+ - name: Setup pnpm
41
+ uses: pnpm/action-setup@v4
42
+ with:
43
+ version: 11
44
+
40
45
  - name: Set up Node.js
41
46
  uses: actions/setup-node@v6
42
47
  with:
43
48
  node-version: '22'
44
- cache: 'npm'
45
- cache-dependency-path: frontend/package-lock.json
49
+ cache: 'pnpm'
50
+ cache-dependency-path: frontend/pnpm-lock.yaml
46
51
 
47
52
  - name: Install dependencies
48
- run: npm ci
53
+ run: pnpm install --frozen-lockfile
49
54
 
50
55
  - name: Lint (eslint)
51
- run: npm run lint
56
+ run: pnpm run lint
52
57
 
53
58
  - name: Test (vitest)
54
- run: npm run test:ci
59
+ run: pnpm run test:ci
55
60
 
56
61
  - name: Build (tsc -b && vite build)
57
- run: npm run build
62
+ run: pnpm run build
63
+
64
+ - name: Bundle size check (size-limit)
65
+ run: pnpm run size
58
66
 
59
67
  openapi-types:
60
68
  name: OpenAPI types drift check
@@ -74,26 +82,31 @@ jobs:
74
82
  - name: Install Python dependencies
75
83
  run: uv sync --all-extras
76
84
 
85
+ - name: Setup pnpm
86
+ uses: pnpm/action-setup@v4
87
+ with:
88
+ version: 11
89
+
77
90
  - name: Set up Node.js
78
91
  uses: actions/setup-node@v6
79
92
  with:
80
93
  node-version: '22'
81
- cache: 'npm'
82
- cache-dependency-path: frontend/package-lock.json
94
+ cache: 'pnpm'
95
+ cache-dependency-path: frontend/pnpm-lock.yaml
83
96
 
84
- - name: Install npm dependencies
97
+ - name: Install pnpm dependencies
85
98
  working-directory: frontend
86
- run: npm ci
99
+ run: pnpm install --frozen-lockfile
87
100
 
88
101
  - name: Regenerate OpenAPI schema and TS types
89
102
  working-directory: frontend
90
- run: npm run gen
103
+ run: pnpm run gen
91
104
 
92
105
  - name: Verify generated files are committed
93
106
  run: |
94
107
  if ! git diff --exit-code frontend/openapi.json frontend/src/api/types.gen.ts; then
95
108
  echo "::error::OpenAPI schema or generated TS types are out of date."
96
- echo "Run 'cd frontend && npm run gen' locally and commit the changes."
109
+ echo "Run 'cd frontend && pnpm run gen' locally and commit the changes."
97
110
  exit 1
98
111
  fi
99
112
 
@@ -172,43 +185,48 @@ jobs:
172
185
  - name: Install Python dependencies
173
186
  run: uv sync --all-extras
174
187
 
188
+ - name: Setup pnpm
189
+ uses: pnpm/action-setup@v4
190
+ with:
191
+ version: 11
192
+
175
193
  - name: Set up Node.js
176
194
  uses: actions/setup-node@v6
177
195
  with:
178
196
  node-version: '22'
179
- cache: 'npm'
180
- cache-dependency-path: frontend/package-lock.json
197
+ cache: 'pnpm'
198
+ cache-dependency-path: frontend/pnpm-lock.yaml
181
199
 
182
- - name: Install npm dependencies
200
+ - name: Install pnpm dependencies
183
201
  working-directory: frontend
184
- run: npm ci
202
+ run: pnpm install --frozen-lockfile
185
203
 
186
204
  - name: Cache Playwright browsers
187
205
  uses: actions/cache@v5
188
206
  id: playwright-cache
189
207
  with:
190
208
  path: ~/.cache/ms-playwright
191
- key: playwright-${{ runner.os }}-${{ hashFiles('frontend/package-lock.json') }}
209
+ key: playwright-${{ runner.os }}-${{ hashFiles('frontend/pnpm-lock.yaml') }}
192
210
 
193
211
  - name: Install Playwright browsers (cold)
194
212
  working-directory: frontend
195
213
  if: steps.playwright-cache.outputs.cache-hit != 'true'
196
- run: npx playwright install --with-deps chromium
214
+ run: pnpm exec playwright install --with-deps chromium
197
215
 
198
216
  - name: Install Playwright system deps (cache hit)
199
217
  working-directory: frontend
200
218
  if: steps.playwright-cache.outputs.cache-hit == 'true'
201
- run: npx playwright install-deps chromium
219
+ run: pnpm exec playwright install-deps chromium
202
220
 
203
221
  - name: Build frontend
204
222
  working-directory: frontend
205
- run: npm run build
223
+ run: pnpm run build
206
224
 
207
225
  - name: Run Playwright tests
208
226
  working-directory: frontend
209
227
  env:
210
228
  CI: 'true'
211
- run: npm run e2e
229
+ run: pnpm run e2e
212
230
 
213
231
  - name: Upload Playwright report
214
232
  if: always()
@@ -34,20 +34,25 @@ jobs:
34
34
  - name: Install Python dependencies
35
35
  run: uv sync --all-extras
36
36
 
37
+ - name: Setup pnpm
38
+ uses: pnpm/action-setup@v4
39
+ with:
40
+ version: 11
41
+
37
42
  - name: Set up Node.js
38
43
  uses: actions/setup-node@v6
39
44
  with:
40
45
  node-version: "22"
41
- cache: "npm"
42
- cache-dependency-path: frontend/package-lock.json
46
+ cache: "pnpm"
47
+ cache-dependency-path: frontend/pnpm-lock.yaml
43
48
 
44
- - name: Install npm dependencies
49
+ - name: Install pnpm dependencies
45
50
  working-directory: frontend
46
- run: npm ci
51
+ run: pnpm install --frozen-lockfile
47
52
 
48
53
  - name: Build frontend (PROD bundle)
49
54
  working-directory: frontend
50
- run: npm run build
55
+ run: pnpm run build
51
56
 
52
57
  - name: Start vis serve
53
58
  run: |
@@ -67,7 +72,7 @@ jobs:
67
72
 
68
73
  - name: Run Lighthouse CI
69
74
  run: |
70
- npx --yes @lhci/cli@0.14.0 autorun --config=./lighthouserc.json
75
+ pnpm dlx @lhci/cli@0.14.0 autorun --config=./lighthouserc.json
71
76
  env:
72
77
  LHCI_GITHUB_APP_TOKEN: ${{ secrets.LHCI_GITHUB_APP_TOKEN || '' }}
73
78
 
@@ -35,20 +35,25 @@ jobs:
35
35
  # Issue #149 以降、wheel に同梱する静的アセット
36
36
  # (src/alpha_visualizer/static/) はリポジトリ管理対象外。
37
37
  # PyPI 配布用に wheel build 直前で frontend を再生成する。
38
+ - name: Setup pnpm
39
+ uses: pnpm/action-setup@v4
40
+ with:
41
+ version: 11
42
+
38
43
  - name: Set up Node.js
39
44
  uses: actions/setup-node@v6
40
45
  with:
41
46
  node-version: "22"
42
- cache: "npm"
43
- cache-dependency-path: frontend/package-lock.json
47
+ cache: "pnpm"
48
+ cache-dependency-path: frontend/pnpm-lock.yaml
44
49
 
45
- - name: Install npm dependencies
50
+ - name: Install pnpm dependencies
46
51
  working-directory: frontend
47
- run: npm ci
52
+ run: pnpm install --frozen-lockfile
48
53
 
49
54
  - name: Build frontend (PROD bundle)
50
55
  working-directory: frontend
51
- run: npm run build
56
+ run: pnpm run build
52
57
 
53
58
  - name: Build
54
59
  run: uv build
@@ -1,4 +1,4 @@
1
1
  # file: /home/runner/work/alpha-visualizer/alpha-visualizer/src/alpha_visualizer/__init__.py
2
2
  # hypothesis_version: 6.152.4
3
3
 
4
- ['0.2.0']
4
+ ['0.3.0']
@@ -1,4 +1,4 @@
1
1
  # file: /home/runner/work/alpha-visualizer/alpha-visualizer/src/alpha_visualizer/cli.py
2
2
  # hypothesis_version: 6.152.4
3
3
 
4
- [8000, '--forge-config', '--forge-dir', '--host', '--no-open', '--port', '.', '127.0.0.1', 'alpha-visualizer', 'forge_config', 'no_open', 'sample-forge', 'samples', 'serve', 'use_bundled_samples', 'vis serve を停止しました。', 'バインドするホスト名', 'ブラウザを自動で開かない', 'ポート番号']
4
+ [8000, '--forge-config', '--forge-dir', '--host', '--no-open', '--port', '.', '127.0.0.1', 'alpha-visualizer', 'forge_config', 'no_open', 'sample-forge', 'samples', 'serve', 'use_bundled_samples', 'バインドするホスト名', 'ブラウザを自動で開かない', 'ポート番号']
@@ -0,0 +1,371 @@
1
+ # Changelog
2
+
3
+ alpha-visualizer の全バージョン変更履歴です。
4
+
5
+
6
+ ## [0.3.0] - 2026-05-16
7
+
8
+ ### ⚠️ Breaking Changes
9
+
10
+ - **CLI コマンドを `vis` → `alpha-vis` にリネーム**。macOS には標準コマンド `/usr/bin/vis`(BSD 系テキスト可視化ユーティリティ)があり、`$PATH` の優先順序によってはこちらが先に解決され、`vis serve: No such file or directory` で初学者が完全に詰まる問題を解消するため。
11
+ - 既存ユーザーは `vis ...` を `alpha-vis ...` に置き換えてください。
12
+ - `pyproject.toml` の `[project.scripts]` から `vis` エントリを削除し、`alpha-vis = "alpha_visualizer.cli:cli"` を追加しました。
13
+
14
+
15
+ ## [0.2.0] - 2026-05-11
16
+
17
+
18
+ ### CI/CD
19
+
20
+ - frontend ジョブに npm run build (tsc -b && vite build) を追加(Closes #74) (#79)
21
+
22
+
23
+ - Lighthouse CI ジョブを追加 (#136)
24
+
25
+
26
+ - E2E fixture drift check ジョブを追加 (#161)
27
+
28
+
29
+ - Lighthouse CI の閾値を実測ベースで強化 + 運用ドキュメント追加 (#162)
30
+
31
+
32
+ - **deps**: bump github/codeql-action from 3 to 4 (#83)
33
+
34
+
35
+ - **deps**: bump actions/cache from 4 to 5 (#85)
36
+
37
+
38
+ - **deps**: bump actions/upload-artifact from 4 to 7 (#86)
39
+
40
+
41
+ - **deps**: bump astral-sh/setup-uv from 4 to 7 (#87)
42
+
43
+
44
+ - **deps**: bump actions/setup-node from 4 to 6 (#84)
45
+
46
+
47
+ - **deps**: bump actions/checkout from 4 to 6 (#168)
48
+
49
+
50
+
51
+ ### その他
52
+
53
+ - alpha-forge/alpha-strike と同様のリリース管理を追加(release.sh・cliff.toml・CHANGELOG) (#42)
54
+
55
+
56
+ - Dependabot version updates と CodeQL ワークフローを追加 (#82)
57
+
58
+
59
+ - **deps-dev**: bump the eslint group across 1 directory with 2 updates (#88)
60
+
61
+
62
+ - **deps-dev**: bump @types/node from 24.12.2 to 25.6.2 in /frontend (#89)
63
+
64
+
65
+ - **deps-dev**: bump vite from 8.0.10 to 8.0.11 in /frontend (#92)
66
+
67
+
68
+ - **deps**: bump react-router-dom from 6.30.3 to 7.15.0 in /frontend (#91)
69
+
70
+
71
+ - **deps-dev**: bump globals from 17.5.0 to 17.6.0 in /frontend (#170)
72
+
73
+
74
+ - **deps-dev**: bump storybook from 9.1.20 to 10.3.6 in /frontend (#169)
75
+
76
+
77
+ - **deps-dev**: bump @storybook/react-vite in /frontend (#171)
78
+
79
+
80
+ - Dependabot に storybook グループを追加 (#174)
81
+
82
+
83
+ - バージョン 0.2.0 にバンプ
84
+
85
+
86
+
87
+ ### テスト
88
+
89
+ - フロントエンド単体テストを追加し CI で実行(Closes #58) (#77)
90
+
91
+
92
+ - Playwright E2E スモークテストを追加し CI で実行(Closes #59) (#78)
93
+
94
+
95
+ - E2E fixture forge.db に sma_cross 用 WFO データを seed (#122)
96
+
97
+
98
+ - services 純関数 + Monte Carlo に property-based testing を追加 (#134)
99
+
100
+
101
+
102
+ ### ドキュメント
103
+
104
+ - 関連リンクを Alforge Labs 公式サイトに変更 (#41)
105
+
106
+
107
+ - OSS 公開に向けてリポジトリドキュメントを整備(README / CONTRIBUTING / SECURITY / 自動スクリーンショット) (#80)
108
+
109
+
110
+ - pages/ vs screens/ 規約を ADR で明文化し BrowseScreen を切り出し(PR-7: F2) (#99)
111
+
112
+
113
+ - **services**: compute_drawdown の正値入力前提を docstring に明記 (#156)
114
+
115
+
116
+ - **adr**: ConditionNode の discriminated union 設計を ADR-0004 で確定 (#157)
117
+
118
+
119
+ - FORGE_CONFIG 環境変数の運用を README で明示 (#160)
120
+
121
+
122
+
123
+ ### バグ修正
124
+
125
+ - tsc -b で残っていた既存の型エラー 4 件を修正 (#73)
126
+
127
+
128
+ - optimize.py の DB 障害レスポンスを 404 から 500 に修正 (#121)
129
+
130
+
131
+ - **frontend**: API 404 を「データなし」UI として表示する (#125)
132
+
133
+
134
+ - OpenAPI スキーマと TS 型を再生成して drift を解消 (#166)
135
+
136
+
137
+ - react と react-dom を 19.2.6 に揃え、Dependabot に react グループを追加 (#167)
138
+
139
+
140
+ - **optimize**: best_metric が非有限値・データ不在時に null を返し、フロントは '—' で表示 (#172)
141
+
142
+
143
+ - **security**: CodeQL の path-injection / log-injection 等 14 件のアラートを解消 (#175)
144
+
145
+
146
+ - **app**: vis serve 起動時の空 forge.db 生成を抑止 (Closes #173) (#176)
147
+
148
+
149
+ - alpha-forge の DB ファイル名デフォルト変更に追従 (#177)
150
+
151
+
152
+
153
+ ### パフォーマンス改善
154
+
155
+ - **frontend**: bundle 最適化(lazy + manualChunks) (#133)
156
+
157
+
158
+
159
+ ### リファクタリング
160
+
161
+ - Repository Pattern を導入し create_engine 重複を排除(PR-1: B1) (#93)
162
+
163
+
164
+ - ドメイン例外階層と統一 exception_handler を導入(PR-2: B4) (#94)
165
+
166
+
167
+ - /api/strategies の N+1 をバッチ取得で解消(PR-3: B6) (#95)
168
+
169
+
170
+ - results.py のヘルパ群を services 層に切り出し(PR-4: B3) (#96)
171
+
172
+
173
+ - tests/test_routers.py を 8 ファイルに分割し factories で seed を集約(PR-5: B2) (#97)
174
+
175
+
176
+ - **frontend**: mock fallback を IS_DEV ガードで囲み PROD bundle から除外 (#100)
177
+
178
+
179
+ - フォーマッタを lib/format.ts に集約(PR-9: F7) (#101)
180
+
181
+
182
+ - useFetchByKey で useBacktestData の 6 hook を集約(PR-10: F5) (#102)
183
+
184
+
185
+ - useStrategyList を 6 hook に SRP 分割(PR-11: F4) (#103)
186
+
187
+
188
+ - **types**: api/types.ts のエスケープハッチを ISP 観点で 4/5 削減 (#104)
189
+
190
+
191
+ - charts/visx/ と components/charts/ の責務分離 ADR + 3 チャート整理(PR-13: F3) (#105)
192
+
193
+
194
+ - **test**: 生 CREATE TABLE を db.py の MetaData に統一 (#123)
195
+
196
+
197
+ - **services**: live.py / wfo.py の整形ロジックを services/ に切り出し (#127)
198
+
199
+
200
+ - **types**: ConditionNode を discriminated union に昇格 (#128)
201
+
202
+
203
+ - **charts**: 4 chart の計算ロジックを lib/ の純関数に集約 (Batch 1) (#129)
204
+
205
+
206
+ - **charts**: DrawdownDetail / WFOTimeline の計算を lib/ に集約 (Batch 2) (#130)
207
+
208
+
209
+ - **frontend**: IdeasPage (498 行) を Container/Presentational に分離 (#131)
210
+
211
+
212
+ - **frontend**: openapi-typescript 移行 Phase 2 — 13 型を生成型 alias に (#152)
213
+
214
+
215
+ - **schemas**: EquityCurve 型名衝突を解消 (#153)
216
+
217
+
218
+ - services/wfo.py / lib/wfo.ts の同名衝突を解消 (#154)
219
+
220
+
221
+ - **schemas**: regime_series / regime_breakdown を Pydantic フィールド化 (#155)
222
+
223
+
224
+ - **charts**: OptimizeScatter / AnnualReturnsBar の C/P 分離 (#159)
225
+
226
+
227
+
228
+ ### 新機能
229
+
230
+ - POST /api/run エンドポイントを追加して Run ボタンを動作させる (#60)
231
+
232
+
233
+ - WFO 合成エクイティカーブの計算と返却を実装(#44) (#61)
234
+
235
+
236
+ - Detail 画面にベンチマーク指標(alpha/beta/IR/Correlation)を表示する (#62)
237
+
238
+
239
+ - 年次リターン(annual_returns)バーチャートを Performance タブに追加 (#46) (#63)
240
+
241
+
242
+ - 最適化結果ビュー(Optimize タブ)を追加(Closes #47)
243
+
244
+
245
+ - 戦略構造ビューを追加(指標・条件・リスク管理の可視化) (#65)
246
+
247
+
248
+ - Ideas ページを追加(ステータス・タグフィルタ・戦略リンク対応) (#66)
249
+
250
+
251
+ - ダーク/ライトテーマ切替 UI トグルを追加(Closes #50) (#67)
252
+
253
+
254
+ - CSV / PNG エクスポート機能を追加(Closes #51) (#68)
255
+
256
+
257
+ - Browse 画面の selectedId / compareIds を URL クエリに同期(Closes #52) (#69)
258
+
259
+
260
+ - グローバル検索(Cmd+K)コマンドパレットを追加(Closes #53) (#70)
261
+
262
+
263
+ - モバイル/タブレット対応(レスポンシブブレークポイント整備)(Closes #54) (#71)
264
+
265
+
266
+ - Compare 画面に戦略間相関ヒートマップを追加(Closes #55) (#72)
267
+
268
+
269
+ - レジーム / HMM ステートを Equity 上に重畳して可視化(Closes #56) (#75)
270
+
271
+
272
+ - ライブ実績ビューを追加し、バックテストとの期間整合 diff を表示(Closes #57) (#76)
273
+
274
+
275
+ - Pydantic v2 schemas を新設し 7 endpoint に response_model= を付与(PR-6: B5) (#98)
276
+
277
+
278
+ - **schemas**: detail endpoints の Pydantic 化 (#124)
279
+
280
+
281
+ - **frontend**: openapi-typescript で TS 型自動生成 (#126)
282
+
283
+
284
+ - **frontend**: Storybook 9 を導入し主要 Presentational コンポーネントのストーリー作成 (#137)
285
+
286
+
287
+ - **frontend**: Storybook 拡張 - 主要 Screen 4 つにストーリー追加 (#158)
288
+
289
+
290
+ - **samples**: OSS 同梱サンプルデータセットを追加 (8 戦略 × 5 銘柄 × 5 年) (#178)
291
+
292
+
293
+
294
+ ## [0.1.1] - 2026-05-05
295
+
296
+
297
+ ### その他
298
+
299
+ - MIT License を追加し v0.1.1 にバージョンアップ (#40)
300
+
301
+
302
+
303
+ ## [0.1.0] - 2026-05-05
304
+
305
+
306
+ ### その他
307
+
308
+ - bump-my-version を設定して /pre-release コマンドを有効化 (#3) (#10)
309
+
310
+
311
+ - THIRDPARTY_LICENSES.txt を初回生成してリポジトリに追加 (#5) (#13)
312
+
313
+
314
+ - org 移管に伴い PyPI publish 用メタデータを整備 (#38)
315
+
316
+
317
+
318
+ ### バグ修正
319
+
320
+ - vis serve に forge.yaml 読込を実装し DB ファイル名のハードコードを解消 (#20) (#22)
321
+
322
+
323
+ - Browse 画面で latest_* が undefined の戦略でクラッシュする問題を修正 (#23) (#25)
324
+
325
+
326
+ - release workflow に contents:read を追加し private repo の checkout を許可 (#39)
327
+
328
+
329
+
330
+ ### リファクタリング
331
+
332
+ - visualizer/ ディレクトリを frontend/ にリネーム (#6)
333
+
334
+
335
+
336
+ ### 新機能
337
+
338
+ - alpha-visualizer リポジトリの初期セットアップ(vis CLI 基盤)
339
+
340
+
341
+ - alpha-visualizer へ dashboard 機能を移植(vis serve)
342
+
343
+
344
+ - CLAUDE.md・スラッシュコマンド・Codexスキルを alpha-forge から移植 (#2)
345
+
346
+
347
+ - タグ push 時に PyPI へ自動公開する release ワークフローを追加 (#4) (#11)
348
+
349
+
350
+ - alpha-forge/visualizer の Atelier/Lab リデザインを frontend/ へ全面同期 (#21)
351
+
352
+
353
+ - list_strategies のレスポンスに symbol / timeframe / max_drawdown / profit_factor / win_rate を追加 (#24) (#26)
354
+
355
+
356
+ - Browse / Compare 画面に Atelier/Lab + 言語トグルをグローバル配置 (#19) (#27)
357
+
358
+
359
+ - Strategy Ledger に Group By(None / Symbol / TF / Sharpe Tier)を追加 (#29) (#30)
360
+
361
+
362
+ - Browse 画面に §3 Symbol Atlas(資産クラス別の銘柄カードグリッド)を追加 (#32) (#33)
363
+
364
+
365
+ - Browse 画面に §2 Saved Views(プリセットレンズ)を追加 (#34) (#35)
366
+
367
+
368
+ - Browse 画面に §1 Heroline + 動線・スクロール改善 + SPA fallback (#36, #31) (#37)
369
+
370
+
371
+