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.
- {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/.agents/skills/source-command-audit-licenses/SKILL.md +1 -1
- {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/.claude/commands/audit-licenses.md +1 -1
- {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/.claude/commands/pre-release.md +15 -0
- {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/.github/PULL_REQUEST_TEMPLATE.md +5 -5
- {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/.github/workflows/ci.yml +39 -21
- {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/.github/workflows/lighthouse.yml +11 -6
- {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/.github/workflows/release.yml +10 -5
- alpha_visualizer-0.2.0/.hypothesis/constants/ac5661ce57db0685 → alpha_visualizer-0.3.0/.hypothesis/constants/7b2b6a48db4df50a +1 -1
- alpha_visualizer-0.2.0/.hypothesis/constants/cc9de77781f98ef2 → alpha_visualizer-0.3.0/.hypothesis/constants/dd2b62c354789905 +1 -1
- alpha_visualizer-0.3.0/CHANGELOG.md +371 -0
- {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/CLAUDE.md +48 -97
- {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/CONTRIBUTING.en.md +11 -11
- {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/CONTRIBUTING.md +11 -11
- {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/PKG-INFO +11 -9
- {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/README.en.md +10 -8
- {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/README.md +10 -8
- {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/SECURITY.en.md +3 -3
- {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/SECURITY.md +3 -3
- {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/THIRDPARTY_LICENSES.txt +27 -0
- {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/docs/adr/0003-openapi-typescript-codegen.md +9 -9
- alpha_visualizer-0.3.0/frontend/.npmrc +4 -0
- alpha_visualizer-0.3.0/frontend/.size-limit.json +20 -0
- {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/frontend/CLAUDE.md +2 -2
- {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/frontend/README.md +12 -9
- {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/frontend/THIRDPARTY_FONTS.md +1 -1
- {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/frontend/e2e/fixtures/README.md +1 -1
- alpha_visualizer-0.3.0/frontend/e2e/screenshots/equity-tv.spec.ts +55 -0
- {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/frontend/package.json +11 -3
- alpha_visualizer-0.3.0/frontend/pnpm-lock.yaml +4251 -0
- alpha_visualizer-0.3.0/frontend/pnpm-workspace.yaml +5 -0
- alpha_visualizer-0.3.0/frontend/src/charts/tv/CompareEquityTV.stories.tsx +101 -0
- alpha_visualizer-0.3.0/frontend/src/charts/tv/CompareEquityTV.tsx +189 -0
- alpha_visualizer-0.3.0/frontend/src/charts/tv/EquityDrawdownPaneTV.stories.tsx +134 -0
- alpha_visualizer-0.3.0/frontend/src/charts/tv/EquityDrawdownPaneTV.tsx +267 -0
- alpha_visualizer-0.3.0/frontend/src/charts/tv/RollingMetricsChartTV.stories.tsx +71 -0
- alpha_visualizer-0.3.0/frontend/src/charts/tv/RollingMetricsChartTV.tsx +142 -0
- alpha_visualizer-0.3.0/frontend/src/charts/tv/WFOEquityTV.stories.tsx +108 -0
- alpha_visualizer-0.3.0/frontend/src/charts/tv/WFOEquityTV.tsx +124 -0
- alpha_visualizer-0.3.0/frontend/src/charts/tv/__tests__/CompareEquityTV.test.tsx +105 -0
- alpha_visualizer-0.3.0/frontend/src/charts/tv/__tests__/EquityDrawdownPaneTV.test.tsx +203 -0
- alpha_visualizer-0.3.0/frontend/src/charts/tv/__tests__/RollingMetricsChartTV.test.tsx +97 -0
- alpha_visualizer-0.3.0/frontend/src/charts/tv/__tests__/WFOEquityTV.test.tsx +150 -0
- alpha_visualizer-0.3.0/frontend/src/charts/tv/__tests__/data.test.ts +124 -0
- alpha_visualizer-0.3.0/frontend/src/charts/tv/__tests__/theme.test.ts +94 -0
- alpha_visualizer-0.3.0/frontend/src/charts/tv/data.ts +117 -0
- alpha_visualizer-0.3.0/frontend/src/charts/tv/theme.ts +105 -0
- alpha_visualizer-0.3.0/frontend/src/constants/featureFlags.ts +84 -0
- {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/frontend/src/screens/BacktestScreen.tsx +180 -63
- {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/frontend/src/screens/CompareScreen.tsx +9 -2
- {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/frontend/src/screens/WFOScreen.tsx +18 -6
- {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/frontend/vite.config.ts +26 -11
- {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/pyproject.toml +3 -3
- {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/release.sh +15 -0
- {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/samples/README.en.md +3 -3
- {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/samples/README.md +3 -3
- {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/samples/build_samples.py +2 -2
- {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/src/alpha_visualizer/__init__.py +1 -1
- {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/src/alpha_visualizer/cli.py +3 -3
- {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/tests/samples/test_sample_forge.py +1 -1
- alpha_visualizer-0.3.0/tests/test_cli.py +52 -0
- {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/uv.lock +1 -1
- alpha_visualizer-0.2.0/CHANGELOG.md +0 -103
- alpha_visualizer-0.2.0/frontend/.npmrc +0 -1
- alpha_visualizer-0.2.0/frontend/package-lock.json +0 -6387
- alpha_visualizer-0.2.0/tests/test_cli.py +0 -30
- {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/.agents/skills/source-command-pre-release/SKILL.md +0 -0
- {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/.codex/hooks.json +0 -0
- {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/.github/ISSUE_TEMPLATE/bug_report.yml +0 -0
- {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/.github/ISSUE_TEMPLATE/bug_report_ja.yml +0 -0
- {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/.github/ISSUE_TEMPLATE/config.yml +0 -0
- {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/.github/ISSUE_TEMPLATE/feature_request.yml +0 -0
- {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/.github/ISSUE_TEMPLATE/feature_request_ja.yml +0 -0
- {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/.github/codeql/README.md +0 -0
- {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/.github/codeql/codeql-config.yml +0 -0
- {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/.github/dependabot.yml +0 -0
- {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/.github/workflows/codeql.yml +0 -0
- {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/.gitignore +0 -0
- {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/.hypothesis/.gitignore +0 -0
- {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/.hypothesis/constants/069853a4f8389a49 +0 -0
- {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/.hypothesis/constants/0a940b6ee0f389fc +0 -0
- {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/.hypothesis/constants/0b2de83fbd38f835 +0 -0
- {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/.hypothesis/constants/0bf3463e8f4751b8 +0 -0
- {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/.hypothesis/constants/150dfae7c64cc789 +0 -0
- {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/.hypothesis/constants/152293548dfa1dc4 +0 -0
- {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/.hypothesis/constants/291dc4c40995bea6 +0 -0
- {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/.hypothesis/constants/312a7aaf12a1fd47 +0 -0
- {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/.hypothesis/constants/331e194303817b32 +0 -0
- {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/.hypothesis/constants/3c70931be7dd2e4e +0 -0
- {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/.hypothesis/constants/3f7b61d4b4a660e1 +0 -0
- {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/.hypothesis/constants/4577b97f57a8a832 +0 -0
- {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/.hypothesis/constants/4a1c4d1532cab28e +0 -0
- {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/.hypothesis/constants/508b282112ab038e +0 -0
- {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/.hypothesis/constants/5c12d3619c3f5d5b +0 -0
- {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/.hypothesis/constants/757b1f8305546439 +0 -0
- {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/.hypothesis/constants/7aec89cee7c5a592 +0 -0
- {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/.hypothesis/constants/7d3b67d825fc154a +0 -0
- {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/.hypothesis/constants/7f90c9d611001617 +0 -0
- {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/.hypothesis/constants/828ed73d45fcee28 +0 -0
- {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/.hypothesis/constants/85f15eb28ea04389 +0 -0
- {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/.hypothesis/constants/89aaa48f251cd53d +0 -0
- {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/.hypothesis/constants/8add761403393fca +0 -0
- {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/.hypothesis/constants/96ca93165140d446 +0 -0
- {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/.hypothesis/constants/97982d8e7c8d4a95 +0 -0
- {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/.hypothesis/constants/a5b6e9cccb23f349 +0 -0
- {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/.hypothesis/constants/a636a4647020033d +0 -0
- {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/.hypothesis/constants/b5803992d2e76cf5 +0 -0
- {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/.hypothesis/constants/b76328deebb21ae6 +0 -0
- {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/.hypothesis/constants/b9ff5bcd3a53e3a7 +0 -0
- {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/.hypothesis/constants/c5349cb90ddc7968 +0 -0
- {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/.hypothesis/constants/c5f6cf064ffb412d +0 -0
- {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/.hypothesis/constants/c9814af66187059c +0 -0
- {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/.hypothesis/constants/da39a3ee5e6b4b0d +0 -0
- {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/.hypothesis/constants/e44a457d795e56c2 +0 -0
- {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/.hypothesis/constants/ea2d606acbfff989 +0 -0
- {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/.hypothesis/constants/ee487c54cd5ca7dc +0 -0
- {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/.hypothesis/constants/eed5e66c16ae84b8 +0 -0
- {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/.hypothesis/constants/f7c4a04c97c0daf8 +0 -0
- {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/.hypothesis/constants/fa443af6269a6e02 +0 -0
- {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/.hypothesis/constants/ff4517cbfe51fea1 +0 -0
- {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/AGENTS.md +0 -0
- {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/CODE_OF_CONDUCT.en.md +0 -0
- {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/CODE_OF_CONDUCT.md +0 -0
- {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/LICENSE +0 -0
- {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/cliff.toml +0 -0
- {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/docs/adr/0001-pages-vs-screens.md +0 -0
- {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/docs/adr/0002-charts-visx-vs-components.md +0 -0
- {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/docs/adr/0004-condition-node-discriminated-union.md +0 -0
- {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/docs/lighthouse-ci.md +0 -0
- {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/docs/screenshots/en/browse.png +0 -0
- {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/docs/screenshots/en/compare.png +0 -0
- {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/docs/screenshots/en/detail.png +0 -0
- {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/docs/screenshots/en/ideas.png +0 -0
- {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/docs/screenshots/en/optimize.png +0 -0
- {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/docs/screenshots/en/strategy.png +0 -0
- {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/docs/screenshots/ja/browse.png +0 -0
- {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/docs/screenshots/ja/compare.png +0 -0
- {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/docs/screenshots/ja/detail.png +0 -0
- {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/docs/screenshots/ja/ideas.png +0 -0
- {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/docs/screenshots/ja/optimize.png +0 -0
- {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/docs/screenshots/ja/strategy.png +0 -0
- {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/frontend/.gitignore +0 -0
- {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/frontend/.storybook/main.ts +0 -0
- {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/frontend/.storybook/preview.ts +0 -0
- {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/frontend/e2e/fixtures/forge/data/ideas/ideas.json +0 -0
- {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/frontend/e2e/fixtures/forge/data/results/backtest_results.db +0 -0
- {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/frontend/e2e/fixtures/forge/data/strategies/momo_breakout.json +0 -0
- {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/frontend/e2e/fixtures/forge/data/strategies/rsi_reversal.json +0 -0
- {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/frontend/e2e/fixtures/forge/data/strategies/sma_cross.json +0 -0
- {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/frontend/e2e/fixtures/forge/forge.yaml +0 -0
- {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/frontend/e2e/helpers/locators.ts +0 -0
- {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/frontend/e2e/samples/sample-fixture.spec.ts +0 -0
- {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/frontend/e2e/screenshots/capture.spec.ts +0 -0
- {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/frontend/e2e/specs/browse.spec.ts +0 -0
- {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/frontend/e2e/specs/compare.spec.ts +0 -0
- {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/frontend/e2e/specs/detail.spec.ts +0 -0
- {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/frontend/e2e/specs/i18n.spec.ts +0 -0
- {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/frontend/eslint.config.js +0 -0
- {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/frontend/index.html +0 -0
- {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/frontend/openapi.json +0 -0
- {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/frontend/playwright.config.ts +0 -0
- {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/frontend/playwright.samples.config.ts +0 -0
- {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/frontend/playwright.screenshots.config.ts +0 -0
- {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/frontend/public/favicon.svg +0 -0
- {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/frontend/public/icons.svg +0 -0
- {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/frontend/src/api/client.ts +0 -0
- {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/frontend/src/api/types.gen.ts +0 -0
- {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/frontend/src/api/types.ts +0 -0
- {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/frontend/src/charts/visx/AnnualReturnsBarV.tsx +0 -0
- {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/frontend/src/charts/visx/CompareEquityV.tsx +0 -0
- {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/frontend/src/charts/visx/CorrelationHeatmapV.tsx +0 -0
- {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/frontend/src/charts/visx/DrawdownChartV.tsx +0 -0
- {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/frontend/src/charts/visx/EquityChartV.tsx +0 -0
- {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/frontend/src/charts/visx/MAEMFEScatterV.tsx +0 -0
- {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/frontend/src/charts/visx/MonthlyHeatmapV.tsx +0 -0
- {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/frontend/src/charts/visx/OptimizeScatterV.tsx +0 -0
- {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/frontend/src/charts/visx/Sparkline.stories.tsx +0 -0
- {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/frontend/src/charts/visx/Sparkline.tsx +0 -0
- {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/frontend/src/charts/visx/__tests__/EquityChartV.regime.test.ts +0 -0
- {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/frontend/src/charts/visx/regimeBands.ts +0 -0
- {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/frontend/src/components/CommandPalette.tsx +0 -0
- {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/frontend/src/components/DetailToolbar.tsx +0 -0
- {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/frontend/src/components/MetricsSummaryBarV2.stories.tsx +0 -0
- {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/frontend/src/components/MetricsSummaryBarV2.tsx +0 -0
- {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/frontend/src/components/RootLayout.tsx +0 -0
- {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/frontend/src/components/SettingsToggles.tsx +0 -0
- {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/frontend/src/components/StrategyHero.tsx +0 -0
- {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/frontend/src/components/__tests__/CommandPalette.test.tsx +0 -0
- {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/frontend/src/components/__tests__/CorrelationHeatmap.test.tsx +0 -0
- {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/frontend/src/components/__tests__/responsive-styles.test.tsx +0 -0
- {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/frontend/src/components/browser/CompareFloatingBar.tsx +0 -0
- {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/frontend/src/components/browser/FilterBar.tsx +0 -0
- {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/frontend/src/components/browser/GroupByToggle.tsx +0 -0
- {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/frontend/src/components/browser/Heroline.tsx +0 -0
- {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/frontend/src/components/browser/RunHistoryTab.tsx +0 -0
- {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/frontend/src/components/browser/SavedViews.tsx +0 -0
- {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/frontend/src/components/browser/StrategySlidePanel.tsx +0 -0
- {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/frontend/src/components/browser/StrategyTable.tsx +0 -0
- {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/frontend/src/components/browser/SymbolAtlas.tsx +0 -0
- {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/frontend/src/components/browser/SymbolCard.tsx +0 -0
- {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/frontend/src/components/charts/AnnualReturnsBar.tsx +0 -0
- {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/frontend/src/components/charts/CorrelationHeatmap.tsx +0 -0
- {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/frontend/src/components/charts/DrawdownDetailChart.tsx +0 -0
- {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/frontend/src/components/charts/MAEMFEScatter.tsx +0 -0
- {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/frontend/src/components/charts/MonteCarloChart.tsx +0 -0
- {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/frontend/src/components/charts/OptimizeScatter.tsx +0 -0
- {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/frontend/src/components/charts/ReturnDistributionChart.tsx +0 -0
- {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/frontend/src/components/charts/RollingMetricsChart.tsx +0 -0
- {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/frontend/src/components/charts/VaRChart.tsx +0 -0
- {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/frontend/src/components/charts/WFOTimeline.tsx +0 -0
- {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/frontend/src/components/charts/WeekdayPerformanceChart.tsx +0 -0
- {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/frontend/src/components/live/LiveTab.tsx +0 -0
- {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/frontend/src/components/live/__tests__/LiveTab.test.tsx +0 -0
- {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/frontend/src/components/live/__tests__/format.test.ts +0 -0
- {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/frontend/src/components/live/format.ts +0 -0
- {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/frontend/src/components/metrics/CompareTable.tsx +0 -0
- {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/frontend/src/components/metrics/ISOOSMetrics.tsx +0 -0
- {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/frontend/src/components/metrics/MetricsGrid.tsx +0 -0
- {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/frontend/src/components/metrics/RegimeBreakdownCards.tsx +0 -0
- {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/frontend/src/components/metrics/SignalQualityBadge.tsx +0 -0
- {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/frontend/src/components/metrics/__tests__/evaluateGood.test.ts +0 -0
- {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/frontend/src/components/metrics/evaluate.ts +0 -0
- {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/frontend/src/components/nav.ts +0 -0
- {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/frontend/src/components/trades/TradeTable.tsx +0 -0
- {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/frontend/src/constants/metricDefinitions.ts +0 -0
- {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/frontend/src/contexts/DashboardContext.tsx +0 -0
- {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/frontend/src/contexts/dashboardConstants.ts +0 -0
- {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/frontend/src/design/a11y.css +0 -0
- {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/frontend/src/design/primitives/Button.tsx +0 -0
- {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/frontend/src/design/primitives/Card.tsx +0 -0
- {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/frontend/src/design/primitives/Chip.tsx +0 -0
- {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/frontend/src/design/primitives/Divider.tsx +0 -0
- {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/frontend/src/design/primitives/KeyValue.tsx +0 -0
- {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/frontend/src/design/primitives/OverflowMenu.tsx +0 -0
- {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/frontend/src/design/primitives/Pill.stories.tsx +0 -0
- {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/frontend/src/design/primitives/Pill.tsx +0 -0
- {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/frontend/src/design/primitives/SectionHeader.tsx +0 -0
- {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/frontend/src/design/primitives/Stat.stories.tsx +0 -0
- {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/frontend/src/design/primitives/Stat.tsx +0 -0
- {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/frontend/src/design/primitives/TabBar.tsx +0 -0
- {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/frontend/src/design/primitives/Toolbar.tsx +0 -0
- {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/frontend/src/design/primitives/__tests__/OverflowMenu.test.tsx +0 -0
- {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/frontend/src/design/primitives/index.ts +0 -0
- {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/frontend/src/design/tokens.css +0 -0
- {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/frontend/src/design/useChartTheme.ts +0 -0
- {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/frontend/src/hooks/__tests__/useEquityViewport.test.ts +0 -0
- {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/frontend/src/hooks/__tests__/useFetchByKey.test.ts +0 -0
- {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/frontend/src/hooks/__tests__/useScrollRestoration.test.tsx +0 -0
- {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/frontend/src/hooks/__tests__/useStrategyList.test.tsx +0 -0
- {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/frontend/src/hooks/__tests__/useTheme.test.tsx +0 -0
- {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/frontend/src/hooks/useBacktestData.ts +0 -0
- {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/frontend/src/hooks/useDebounce.ts +0 -0
- {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/frontend/src/hooks/useEquityViewport.ts +0 -0
- {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/frontend/src/hooks/useFetchByKey.ts +0 -0
- {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/frontend/src/hooks/useIdeasList.ts +0 -0
- {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/frontend/src/hooks/useRecentStrategies.ts +0 -0
- {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/frontend/src/hooks/useScrollRestoration.ts +0 -0
- {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/frontend/src/hooks/useSparklineCache.ts +0 -0
- {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/frontend/src/hooks/useStrategyList.ts +0 -0
- {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/frontend/src/hooks/useSymbolStats.ts +0 -0
- {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/frontend/src/hooks/useTheme.ts +0 -0
- {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/frontend/src/i18n/__tests__/strings.test.ts +0 -0
- {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/frontend/src/i18n/strings.ts +0 -0
- {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/frontend/src/lib/__tests__/correlation.test.ts +0 -0
- {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/frontend/src/lib/__tests__/distribution.test.ts +0 -0
- {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/frontend/src/lib/__tests__/drawdown.test.ts +0 -0
- {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/frontend/src/lib/__tests__/format.test.ts +0 -0
- {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/frontend/src/lib/__tests__/monteCarlo.properties.test.ts +0 -0
- {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/frontend/src/lib/__tests__/monteCarlo.test.ts +0 -0
- {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/frontend/src/lib/__tests__/rolling.test.ts +0 -0
- {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/frontend/src/lib/__tests__/searchParams.test.ts +0 -0
- {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/frontend/src/lib/__tests__/searchStrategies.test.ts +0 -0
- {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/frontend/src/lib/__tests__/walkForward.test.ts +0 -0
- {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/frontend/src/lib/__tests__/weekday.test.ts +0 -0
- {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/frontend/src/lib/assetClass.ts +0 -0
- {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/frontend/src/lib/correlation.ts +0 -0
- {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/frontend/src/lib/csv.ts +0 -0
- {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/frontend/src/lib/distribution.ts +0 -0
- {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/frontend/src/lib/drawdown.ts +0 -0
- {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/frontend/src/lib/exportPng.ts +0 -0
- {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/frontend/src/lib/format.ts +0 -0
- {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/frontend/src/lib/monteCarlo.ts +0 -0
- {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/frontend/src/lib/rolling.ts +0 -0
- {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/frontend/src/lib/searchParams.ts +0 -0
- {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/frontend/src/lib/searchStrategies.ts +0 -0
- {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/frontend/src/lib/walkForward.ts +0 -0
- {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/frontend/src/lib/weekday.ts +0 -0
- {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/frontend/src/main.tsx +0 -0
- {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/frontend/src/mock/btData.ts +0 -0
- {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/frontend/src/pages/BrowsePage.tsx +0 -0
- {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/frontend/src/pages/ComparePage.tsx +0 -0
- {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/frontend/src/pages/DetailPage.tsx +0 -0
- {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/frontend/src/pages/IdeasPage.tsx +0 -0
- {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/frontend/src/router.tsx +0 -0
- {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/frontend/src/screens/BacktestScreen.stories.tsx +0 -0
- {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/frontend/src/screens/BrowseScreen.tsx +0 -0
- {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/frontend/src/screens/CompareScreen.stories.tsx +0 -0
- {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/frontend/src/screens/ISOOSScreen.tsx +0 -0
- {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/frontend/src/screens/IdeasScreen.stories.tsx +0 -0
- {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/frontend/src/screens/IdeasScreen.tsx +0 -0
- {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/frontend/src/screens/OptimizeScreen.stories.tsx +0 -0
- {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/frontend/src/screens/OptimizeScreen.tsx +0 -0
- {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/frontend/src/screens/StrategyScreen.tsx +0 -0
- {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/frontend/src/screens/WFOScreen.stories.tsx +0 -0
- {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/frontend/src/test-setup.ts +0 -0
- {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/frontend/tsconfig.app.json +0 -0
- {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/frontend/tsconfig.e2e.json +0 -0
- {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/frontend/tsconfig.json +0 -0
- {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/frontend/tsconfig.node.json +0 -0
- {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/lighthouserc.json +0 -0
- {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/samples/__init__.py +0 -0
- {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/samples/_generators/__init__.py +0 -0
- {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/samples/_generators/compatibility_matrix.py +0 -0
- {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/samples/_generators/ideas_defs.py +0 -0
- {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/samples/_generators/pseudo_backtest.py +0 -0
- {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/samples/_generators/pseudo_grid.py +0 -0
- {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/samples/_generators/pseudo_wfo.py +0 -0
- {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/samples/_generators/strategy_defs.py +0 -0
- {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/samples/_generators/synthetic_ohlcv.py +0 -0
- {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/samples/_generators/writers.py +0 -0
- {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/samples/sample-forge/data/ideas/ideas.json +0 -0
- {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/samples/sample-forge/data/results/backtest_results.db +0 -0
- {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/samples/sample-forge/data/strategies/bbands_breakout_v1.json +0 -0
- {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/samples/sample-forge/data/strategies/donchian_turtle_v1.json +0 -0
- {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/samples/sample-forge/data/strategies/ema_adx_macd_v1.json +0 -0
- {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/samples/sample-forge/data/strategies/macd_crossover_v1.json +0 -0
- {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/samples/sample-forge/data/strategies/range_reversion_v1.json +0 -0
- {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/samples/sample-forge/data/strategies/rsi_reversion_v1.json +0 -0
- {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/samples/sample-forge/data/strategies/sma_crossover_v1.json +0 -0
- {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/samples/sample-forge/data/strategies/supertrend_adx_v1.json +0 -0
- {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/samples/sample-forge/forge.yaml +0 -0
- {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/scripts/generate_openapi.py +0 -0
- {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/src/alpha_visualizer/app.py +0 -0
- {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/src/alpha_visualizer/db.py +0 -0
- {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/src/alpha_visualizer/dependencies.py +0 -0
- {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/src/alpha_visualizer/errors.py +0 -0
- {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/src/alpha_visualizer/forge_config.py +0 -0
- {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/src/alpha_visualizer/log_sanitize.py +0 -0
- {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/src/alpha_visualizer/repositories/__init__.py +0 -0
- {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/src/alpha_visualizer/repositories/backtest_results.py +0 -0
- {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/src/alpha_visualizer/repositories/ideas.py +0 -0
- {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/src/alpha_visualizer/repositories/live.py +0 -0
- {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/src/alpha_visualizer/repositories/optimization.py +0 -0
- {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/src/alpha_visualizer/repositories/strategies.py +0 -0
- {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/src/alpha_visualizer/routers/__init__.py +0 -0
- {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/src/alpha_visualizer/routers/ideas.py +0 -0
- {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/src/alpha_visualizer/routers/live.py +0 -0
- {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/src/alpha_visualizer/routers/optimize.py +0 -0
- {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/src/alpha_visualizer/routers/results.py +0 -0
- {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/src/alpha_visualizer/routers/run.py +0 -0
- {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/src/alpha_visualizer/routers/strategies.py +0 -0
- {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/src/alpha_visualizer/routers/wfo.py +0 -0
- {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/src/alpha_visualizer/schemas/__init__.py +0 -0
- {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/src/alpha_visualizer/schemas/ideas.py +0 -0
- {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/src/alpha_visualizer/schemas/live.py +0 -0
- {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/src/alpha_visualizer/schemas/optimize.py +0 -0
- {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/src/alpha_visualizer/schemas/results.py +0 -0
- {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/src/alpha_visualizer/schemas/strategies.py +0 -0
- {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/src/alpha_visualizer/schemas/wfo.py +0 -0
- {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/src/alpha_visualizer/services/__init__.py +0 -0
- {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/src/alpha_visualizer/services/backtest.py +0 -0
- {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/src/alpha_visualizer/services/live.py +0 -0
- {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/src/alpha_visualizer/services/walk_forward.py +0 -0
- {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/tests/__init__.py +0 -0
- {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/tests/conftest.py +0 -0
- {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/tests/factories.py +0 -0
- {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/tests/fixtures/build_e2e_fixture.py +0 -0
- {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/tests/repositories/__init__.py +0 -0
- {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/tests/repositories/test_backtest_results_repo.py +0 -0
- {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/tests/repositories/test_ideas_reader.py +0 -0
- {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/tests/repositories/test_live_repo.py +0 -0
- {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/tests/repositories/test_optimization_repo.py +0 -0
- {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/tests/repositories/test_strategies_repo.py +0 -0
- {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/tests/routers/__init__.py +0 -0
- {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/tests/routers/test_forge_yaml_integration.py +0 -0
- {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/tests/routers/test_ideas.py +0 -0
- {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/tests/routers/test_live.py +0 -0
- {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/tests/routers/test_optimize.py +0 -0
- {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/tests/routers/test_results.py +0 -0
- {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/tests/routers/test_run.py +0 -0
- {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/tests/routers/test_strategies.py +0 -0
- {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/tests/routers/test_wfo.py +0 -0
- {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/tests/samples/__init__.py +0 -0
- {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/tests/samples/test_pseudo_backtest.py +0 -0
- {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/tests/samples/test_pseudo_grid.py +0 -0
- {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/tests/samples/test_pseudo_wfo.py +0 -0
- {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/tests/samples/test_strategy_defs.py +0 -0
- {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/tests/samples/test_synthetic_ohlcv.py +0 -0
- {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/tests/samples/test_writers.py +0 -0
- {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/tests/schemas/__init__.py +0 -0
- {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/tests/schemas/test_schemas.py +0 -0
- {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/tests/services/__init__.py +0 -0
- {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/tests/services/test_backtest.py +0 -0
- {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/tests/services/test_backtest_properties.py +0 -0
- {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/tests/services/test_live.py +0 -0
- {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/tests/services/test_wfo.py +0 -0
- {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/tests/test_app.py +0 -0
- {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/tests/test_db.py +0 -0
- {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/tests/test_dependencies.py +0 -0
- {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/tests/test_errors.py +0 -0
- {alpha_visualizer-0.2.0 → alpha_visualizer-0.3.0}/tests/test_forge_config.py +0 -0
- {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/` が存在しない場合は `
|
|
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/` が存在しない場合は `
|
|
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 &&
|
|
41
|
-
- [ ] フロントエンド Lint: `cd frontend &&
|
|
42
|
-
- [ ] フロントエンドビルド: `cd frontend &&
|
|
43
|
-
- [ ] E2E(UI 変更時): `cd frontend &&
|
|
44
|
-
- [ ] スクリーンショット再撮影(UI 変更時): `cd frontend &&
|
|
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: '
|
|
45
|
-
cache-dependency-path: frontend/
|
|
49
|
+
cache: 'pnpm'
|
|
50
|
+
cache-dependency-path: frontend/pnpm-lock.yaml
|
|
46
51
|
|
|
47
52
|
- name: Install dependencies
|
|
48
|
-
run:
|
|
53
|
+
run: pnpm install --frozen-lockfile
|
|
49
54
|
|
|
50
55
|
- name: Lint (eslint)
|
|
51
|
-
run:
|
|
56
|
+
run: pnpm run lint
|
|
52
57
|
|
|
53
58
|
- name: Test (vitest)
|
|
54
|
-
run:
|
|
59
|
+
run: pnpm run test:ci
|
|
55
60
|
|
|
56
61
|
- name: Build (tsc -b && vite build)
|
|
57
|
-
run:
|
|
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: '
|
|
82
|
-
cache-dependency-path: frontend/
|
|
94
|
+
cache: 'pnpm'
|
|
95
|
+
cache-dependency-path: frontend/pnpm-lock.yaml
|
|
83
96
|
|
|
84
|
-
- name: Install
|
|
97
|
+
- name: Install pnpm dependencies
|
|
85
98
|
working-directory: frontend
|
|
86
|
-
run:
|
|
99
|
+
run: pnpm install --frozen-lockfile
|
|
87
100
|
|
|
88
101
|
- name: Regenerate OpenAPI schema and TS types
|
|
89
102
|
working-directory: frontend
|
|
90
|
-
run:
|
|
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 &&
|
|
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: '
|
|
180
|
-
cache-dependency-path: frontend/
|
|
197
|
+
cache: 'pnpm'
|
|
198
|
+
cache-dependency-path: frontend/pnpm-lock.yaml
|
|
181
199
|
|
|
182
|
-
- name: Install
|
|
200
|
+
- name: Install pnpm dependencies
|
|
183
201
|
working-directory: frontend
|
|
184
|
-
run:
|
|
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/
|
|
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:
|
|
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:
|
|
219
|
+
run: pnpm exec playwright install-deps chromium
|
|
202
220
|
|
|
203
221
|
- name: Build frontend
|
|
204
222
|
working-directory: frontend
|
|
205
|
-
run:
|
|
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:
|
|
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: "
|
|
42
|
-
cache-dependency-path: frontend/
|
|
46
|
+
cache: "pnpm"
|
|
47
|
+
cache-dependency-path: frontend/pnpm-lock.yaml
|
|
43
48
|
|
|
44
|
-
- name: Install
|
|
49
|
+
- name: Install pnpm dependencies
|
|
45
50
|
working-directory: frontend
|
|
46
|
-
run:
|
|
51
|
+
run: pnpm install --frozen-lockfile
|
|
47
52
|
|
|
48
53
|
- name: Build frontend (PROD bundle)
|
|
49
54
|
working-directory: frontend
|
|
50
|
-
run:
|
|
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
|
-
|
|
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: "
|
|
43
|
-
cache-dependency-path: frontend/
|
|
47
|
+
cache: "pnpm"
|
|
48
|
+
cache-dependency-path: frontend/pnpm-lock.yaml
|
|
44
49
|
|
|
45
|
-
- name: Install
|
|
50
|
+
- name: Install pnpm dependencies
|
|
46
51
|
working-directory: frontend
|
|
47
|
-
run:
|
|
52
|
+
run: pnpm install --frozen-lockfile
|
|
48
53
|
|
|
49
54
|
- name: Build frontend (PROD bundle)
|
|
50
55
|
working-directory: frontend
|
|
51
|
-
run:
|
|
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/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', '
|
|
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
|
+
|