Feat/unify backend layer#80
Merged
Merged
Conversation
09cc000 to
3a24d44
Compare
nikspz
reviewed
May 1, 2026
Contributor
There was a problem hiding this comment.
commit 3a24d44
- Cloned and installed PR80
- make install ✅
- make run ✅
- there’s no /servers after /start command ❌(in the menu)
-
- update server ip with /servers
- cannot reach servers (resolved)
- There’s no info on condor site on how to set up hummingbot-api and it is not set up for 0.0.0.0 server also https://condor.hummingbot.org/getting-started/installing
- set up with and update docker stuff
make install # Create conda environment conda activate hummingbot-api make run # Run with hot-reload
- set up with and update docker stuff
- There’s no info on condor site on how to set up hummingbot-api and it is not set up for 0.0.0.0 server also https://condor.hummingbot.org/getting-started/installing
- Fetchers — No Regressions
- Open Telegram, run /portfolio — portfolio data loads correctly ✅
- Run /bots — bot status list renders ✅
- Run /executors — executor list loads ✅
- Run /trade on a CEX pair — prices, order book, and trading rules load ❌ shows chain and connector
- used through dashboard: created order successfully ✅
- cancelled order successfully (when stopped executor)✅
- Edit any handler file to trigger hot-reload — data keeps flowing after reload
- User Preferences Sync (TG ↔ Web)
- / web ✅
- In Telegram, change portfolio days (e.g. 7d → 30d) or switch active server ✅
- could change but not showing previous value (7d or 30 days ago since it just started)
- Candle Store (Charts)
- Open the Trade page — verify candlestick chart loads with data ✅
- Switch trading pair — chart updates to new pair, old data doesn't leak ✅
- Switch interval (1m → 5m → 1h) — candles reload correctly ✅
- Wait 30+ seconds on a sub-1h interval — candles keep updating, no staleness indicator ✅
- Open a second chart tab with a different pair, close the first — second tab keeps receiving data ✅
- Disconnect network briefly, reconnect — chart resumes updating ✅
- Hard refresh the page (F5) — chart loads from REST and WS resumes streaming ✅
- Executor Data Resilience
- Open the Trade page — executors load immediately (no blank state) ✅
- Hard refresh the page — executors visible right away ✅
- Create or close an executor — it appears/disappears in real-time via WS ✅
- Using web interface:
- Portfolio: ok ✅
- Trade: ok ✅
- Bots: ok ✅
- Note: logs is not available in Dashboard ❌ (But available to check from Condor telegram menu of Bots)
Contributor
|
Commit de42796
Test User Preferences Sync (TG ↔ Web) ❗
Other issues found: |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.









Features
Unified User Preferences (TG + Web)
User preferences are now shared across Telegram and the web dashboard via config.yml. Every preference mutation in Telegram (active server, portfolio days, CLOB account, DEX slippage,
etc.) syncs to ConfigManager, and the web dashboard can read/write them through new GET/PATCH /auth/preferences endpoints. On first access, preferences are hydrated from config.yml into
the Telegram session.
Singleton Candle Store
New framework-agnostic candle-store.ts singleton that manages all candle data outside of React Query. Features reference-counted WS subscriptions with 5-minute deferred teardown, LRU
eviction (max 20 collections), timestamp dedup/merge, and O(1) upserts. A companion useCandleStore React hook bridges it to components with built-in staleness detection. The TradingView
datafeed now uses the candle store directly instead of managing its own WS subscriptions or REST polling fallback.
WebSocket onConnect Callback
CondorWebSocket now exposes an onConnect() handler so components can react immediately to (re)connections instead of relying on polling intervals.
Positions Notional Value Column
Added notional_value (amount × entry_price) to the positions table in both the MCP formatter and the frontend ConsolidatedPosition interface.
Improvements
Extract Fetchers into condor/fetchers/
All data-fetch functions scattered across handler _shared.py files were extracted into a dedicated condor/fetchers/ package with one module per data type (portfolio, prices, positions,
orders, executors, bots, connectors, trading_rules, market_data, server_status). This breaks circular dependencies between the data layer and handler layer and makes fetch logic
reusable without importing handler code.
Simplify SDS Registration
register_default_fetches() now imports directly from condor.fetchers instead of defining inline wrappers that imported from handlers. The listener notification passes ServerDataType
directly instead of reverse-mapping to the legacy DataType enum. The redundant DataManager.register_default_fetches() call was removed from main.py.
Backtest Store: Per-File Storage
Migrated from a single data/backtests.json to individual files under data/backtests/ with a lightweight _index.json for fast listing. Includes automatic legacy migration on first run.
Controller Config Full-Replace
When updating a controller config with YAML content, it now does a full replace (preserving identity fields id, controller_name, controller_type) instead of a shallow merge that left
stale keys behind.
Fixes
Executor Data Lost on Page Refresh
The executors query was enabled: false (WS-only), meaning a hard refresh showed no executors until the next WS push. Changed to a real REST fetch on mount with staleTime: 30s and
keepPreviousData to prevent flicker.
Candle Data Managed in React Query Caused Re-renders and Memory Growth
Candle updates flowing through React Query's setQueryData caused unnecessary re-renders across unrelated components and unbounded cache growth. Moved candle data to the dedicated
singleton store which handles its own lifecycle.
WS Reconnect Not Detected Immediately
Components relied on a polling interval to detect WS reconnections, causing a delay before data resumed. The new onConnect callback triggers React state updates instantly on reconnect.
QA Test Plan