Commit Graph

79 Commits

Author SHA1 Message Date
a436fa61e5 fix(web): tolerate unavailable theme storage 2026-05-05 22:23:06 -07:00
75a3ac4ecf refactor(web): normalize entry form theme surface 2026-05-05 22:20:58 -07:00
df00e977d4 refactor(web): normalize global config theme surface 2026-05-05 22:18:42 -07:00
b8864ea276 refactor(web): normalize reconciliation audit theme surfaces 2026-05-05 22:06:05 -07:00
5d0f138cd1 refactor(web): normalize strategy profile theme surfaces 2026-05-05 21:49:46 -07:00
root
6b2ddeb837 fix(simple): clarify market price fallback copy 2026-05-06 04:33:41 +00:00
root
69e1b12d63 refactor(web): normalize advanced theme surfaces 2026-05-06 04:18:48 +00:00
root
76d326c793 refactor(web): normalize secondary ux surfaces 2026-05-06 03:27:52 +00:00
root
266b367322 feat(web): add shared light dark theme system 2026-05-06 02:56:27 +00:00
root
9021df19ad fix(simple): restore form contrast 2026-05-06 02:31:34 +00:00
root
90e733b46c feat(simple): save dip-buy and profit-exit setups 2026-05-06 02:14:32 +00:00
root
0bd46ab43b feat(simple): auto-create dedicated execution profile 2026-05-06 01:29:45 +00:00
root
b33afc6c8c fix(web): require active profile for simple trades 2026-05-06 00:22:07 +00:00
root
feee2028aa feat(web): make simple tab direct trade flow 2026-05-06 00:13:29 +00:00
root
b7044a1eae fix(web): source simple trigger market price 2026-05-06 00:05:28 +00:00
root
00c117321d feat(web): add simple trade trigger tab 2026-05-05 23:57:08 +00:00
root
0db2693a20 fix(portfolio): satisfy manual position null-safety 2026-05-05 23:33:05 +00:00
root
0f74d7b292 fix(portfolio): tighten bootstrap and manual position handling 2026-05-05 23:31:33 +00:00
root
39456473cb feat(settings): add per-user fmp api key 2026-05-05 23:08:31 +00:00
root
5ba315fd02 fix(web): prevent public bundle localhost api fallback 2026-05-05 22:04:06 +00:00
root
db29a3f6b9 fix(web): guard admin config from non-admin users 2026-05-05 21:38:56 +00:00
root
427490ebdb fix(web): correct public trading api base url 2026-05-05 20:50:55 +00:00
root
2a510ded83 fix(docker): vendor platform packages for container builds 2026-05-05 20:31:48 +00:00
root
1bd0297066 chore(build): add switchable bytelyst package source 2026-05-05 19:47:41 +00:00
e266a8ba85 fix(E3): raise Monaco build heap 2026-05-04 18:14:08 -07:00
e8b3c9cf69 fix(E3): bundle Monaco workers locally 2026-05-04 18:10:18 -07:00
8a8c313ee8 fix(E1): lazy-load code strategy editor 2026-05-04 18:02:46 -07:00
fce0228992 fix(D9): respect reduced motion preference 2026-05-04 17:59:07 -07:00
b1f872f54c fix(D8): make empty-state chips market-aware 2026-05-04 17:56:34 -07:00
1b2130e001 fix(D7): add scoped keyboard shortcuts 2026-05-04 17:53:37 -07:00
2089b9aa16 fix(D6): clean up strategy editor timers 2026-05-04 17:50:38 -07:00
3bf1ca7d51 fix(D4): highlight selected screener sector 2026-05-04 17:46:52 -07:00
1e502b9f90 fix(D3): derive ticker exchange label from profile 2026-05-04 17:43:20 -07:00
5ca8183efb fix(D2): restore contrast for legacy settings tabs 2026-05-04 17:40:31 -07:00
a0476c39a6 fix: avoid duplicate profile refresh events 2026-05-04 17:38:22 -07:00
ee7404ac61 fix(B10): add explicit not found route 2026-05-04 17:23:23 -07:00
70db4c9a04 fix(B9): surface builder strategies in strategies tab 2026-05-04 17:21:18 -07:00
1cd23f35f2 fix(B8): wire visual builder backtest 2026-05-04 17:17:44 -07:00
1fd1bf3ce6 fix(B7): remove unused code editor ref 2026-05-04 17:15:07 -07:00
27b3d1a1dc fix(B5): derive quick stats from chart bars 2026-05-04 17:13:32 -07:00
311d79c4c4 fix(B4): show latest bar timestamp in ticker header 2026-05-04 17:10:57 -07:00
e089832039 fix(C5): pause index polling when hidden
Guard Header market-index refreshes with document.visibilityState and resume on visibilitychange so hidden tabs stop polling the backend while preserving stale index data.

Refs: docs/AUDIT_REDESIGN.md item C5.

Co-Authored-By: GPT-5 Codex <noreply@openai.com>
2026-05-04 16:50:37 -07:00
a9c33b1c14 fix(D5): add responsive dashboard breakpoints
Move fixed shell dimensions into responsive classes so sub-1024px layouts hide the right panel, turn the sidebar into a bottom nav, and keep dashboard content usable with adaptive grids and horizontal screener scrolling.

Refs: docs/AUDIT_REDESIGN.md item D5.

Co-Authored-By: GPT-5 Codex <noreply@openai.com>
2026-05-04 16:41:48 -07:00
0fb1d63cbe fix(D1): add dashboard skeleton loaders
Replace plain loading text in news, research cards, and screener results with stable skeleton layouts so the dashboard holds its shape while market data requests resolve.

Refs: docs/AUDIT_REDESIGN.md item D1.

Co-Authored-By: GPT-5 Codex <noreply@openai.com>
2026-05-04 16:38:17 -07:00
da79682ca3 fix(B6): persist code strategy saves
Route CodeStrategyEditor saves through the canonical profile API instead of browser localStorage, carrying the active symbol plus ResearchView capital and risk defaults into an inactive saved code strategy profile.

Refs: docs/AUDIT_REDESIGN.md item B6.

Co-Authored-By: GPT-5 Codex <noreply@openai.com>
2026-05-04 16:34:45 -07:00
412fa5ad7c fix(audit): close agent follow-up gaps
Centralize the HomeView research profile fetch so the ticker header and research cards share one FMP profile request, preserving the B3 company-name behavior without doubling profile traffic. Wire the FMP cache regression into the backend test script and fix the stale API-contract shared import so backend tests can run through the new cache check.

Refs: docs/AUDIT_REDESIGN.md items B2, B3, and C2.

Co-Authored-By: GPT-5 Codex <noreply@openai.com>
2026-05-04 16:18:21 -07:00
ed8175eb1f fix(B2,B3): wire ticker header actions
Route the ticker header watchlist and alert controls to their existing screens and replace the symbol placeholder with the research profile company name while preserving a symbol fallback.

Refs: docs/AUDIT_REDESIGN.md items B2 and B3.

Co-Authored-By: GPT-5 Codex <noreply@openai.com>
2026-05-04 16:07:31 -07:00
c54b9f2017 fix(B1): wire RSI MACD Bollinger chart toggles
Compute RSI, MACD, and Bollinger Bands from the OHLCV bars already loaded by StockChart so the redesigned dashboard can expose the planned technical indicators without adding backend calls. Bollinger Bands overlay the price chart while RSI and MACD render in separate panels to preserve scale readability.

Refs: docs/AUDIT_REDESIGN.md item B1.

Co-Authored-By: GPT-5 Codex <noreply@openai.com>
2026-05-04 15:19:54 -07:00
ece7fa9504 test(F7,F8): fix tab flag cache and entry alert specs
Reset the tab feature flag cache between DOM tests so one authenticated response cannot leak into fallback cases, and make the trade execution failure spec submit a valid executable order before asserting the backend error alert. This closes the documented pre-existing web test failures and restores the full Vitest suite to green.

Refs: docs/AUDIT_REDESIGN.md items F7 and F8.

Co-Authored-By: GPT-5 Codex <noreply@openai.com>
2026-05-04 15:10:59 -07:00
ddbffb6cd1 fix(audit-A): repair the 5 critical broken integrations
A1+A2 — CodeStrategyEditor backtest call
  Was: POST /api/backtest with { symbol, strategyCode, mode: 'code' }
  Now: POST /api/backtest/run with { symbols: [s], strategyConfig: {
       type: 'code', language: 'javascript', code } }
  The backend route is /api/backtest/run (not /api/backtest), and
  /api/backtest/run validates `symbols[]` and `strategyConfig`, not the
  ad-hoc fields we were sending. Also unwraps the { success, results }
  envelope the engine returns and surfaces success:false errors.

A3 — VisualRuleBuilder save shape
  Was: hand-rolled fetch to /api/profiles with { name, symbol, strategyType,
       visualRules, description } — backend's saveTradeProfileForUser ignored
       all of that and either 400'd or persisted a half-empty row.
  Now: uses the canonical createTradeProfile() helper from lib/profileApi
       with the documented TradeProfilePayload shape. Visual rules go inside
       strategy_config.{type:'visual', version:1, rules:[...]} so the engine
       can fan out to a visual interpreter without conflicting with the
       existing rule-based engine. Allocated capital + risk pct pulled from
       botState.settings so the profile inherits the user's current sizing.
       is_active defaults false so the user activates explicitly.

A4+A5 — RightPanel.NewsFeed auth + runtime
  Was: raw fetch() to import.meta.env.VITE_TRADING_API_URL with no
       Authorization header → 401 on every render in any environment that
       requires auth, and prod-broken where the runtime resolver is the
       only source of truth for the API base URL.
  Now: uses fetchNews() from lib/marketApi which already carries the
       platform Bearer token and routes through tradingRuntime.tradingApiUrl.
       Adds an error state in the UI for visibility instead of silently
       leaving the panel blank.

Verified: web/ tsc --noEmit passes. No behavioural change to non-affected
code paths (RightPanel portfolio summary, ResearchView other tabs, etc.).

Refs: docs/AUDIT_REDESIGN.md items A1–A5.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-04 06:23:52 -07:00