Spaces:
Sleeping
Hermes Futures Desk — Functional Real-UI Repair Report
Date: 2026-07-22 Package: V5 real-code audit
Scope
The supplied V4 project was inspected again with a specific requirement: the
production Futures interface must be functional and must not display fabricated,
seeded, random, mock, or presentation-only market/account data. The deterministic
trading engine, Datasource 4 authority, noTradeGuard, freshness gates, risk
formulas, server-side Paper revalidation, and Telegram webhook isolation were not
weakened.
Live-Space verification status
The requested URL was targeted for comparison, but outbound DNS/browser navigation
to really-amin-simplechatbot.hf.space was blocked in the available execution
environment. Therefore this report does not claim an authenticated live-browser
pass against that deployment. The actual source package was instead audited and
validated locally through its API contracts, complete test suite, JavaScript
parsing, HTML/DOM checks, and production-code scans. A post-deployment authenticated
read-only browser check is still required.
Newly confirmed and repaired UI issues
1. Fabricated symbol catalog entries
Found: The server padded a failed/short provider catalog with a large hard-coded
list marked as source=seed. Those entries looked like real available markets even
though they had not been returned by a live provider.
Repair:
- Removed the entire emergency/seed symbol universe from production code.
- The catalog now contains only symbols returned by real public providers or a previously persisted real provider cache.
- If neither is available,
/api/futures/symbolsreturns an explicitstate=unavailable, an empty list, and a reason. - Manual symbol entry remains possible for real server-side analysis, but it does not imply Futures verification and cannot authorize execution.
2. Presentation-only runtime state
Found: The sidebar initially declared the execution environment Online before
any server status request had succeeded.
Repair:
- The initial state is now
Checking. - The badge is updated only from
/api/futures/status. - A failed status request changes it to
Unavailable; no optimistic online state remains in static HTML.
3. Prefilled local user activity
Found: New browsers were given a prefilled BTC watchlist and recent-market list, which looked like existing user activity.
Repair:
- Default watchlist is empty.
- Default recent-market history is empty.
- Entries are created only after an actual user selection/action.
4. Fabricated account defaults
Found: Missing account fields could render as 0 open positions or paper mode,
which confused an unavailable response with a genuine zero/real mode.
Repair:
- Missing mode and position counts now display
Unavailable. - A valid empty positions array still correctly displays
No open Paper positions. - Invalid/unavailable position responses are distinguished from a valid empty book.
5. Stale chart under a new or unavailable market
Found: An old chart could remain visible while a different symbol/interval was loading or after the new market request failed, making old data appear to belong to the current market.
Repair:
- Candles are cleared whenever symbol, interval, or candle limit changes.
- Structured HTTP 503/unavailable payloads are rendered instead of discarded.
- Generic market errors clear price, funding, open interest, order book, chart, and verification fields to explicit unavailable/blocked values.
6. Duplicate overlapping market requests
Found: Automatic refresh, page visibility, symbol changes, and manual refresh could overlap and issue duplicate market requests.
Repair:
- Market loading is single-flight.
- One pending refresh is coalesced and runs after the active request finishes.
- Request sequence checks prevent an older response from overwriting the currently selected symbol/interval.
- Real refresh cadence is displayed in the UI: status 15 seconds, market 30 seconds, Telegram 60 seconds.
7. Login/session response handling
Found: Redirected login HTML or a non-JSON authentication response could be reported as a generic JSON/API failure.
Repair:
apiFetchdetects login redirects and expired sessions.- Non-JSON login pages trigger the real sign-in redirect.
- HTTP status and structured payload are retained on errors so the UI can render truthful unavailable states.
8. Analysis history timestamps
Found: The browser could substitute its own current time as if it were the server-created plan timestamp.
Repair:
- Server
created_atis preserved when present. - Browser receipt time is stored separately as
received_at. - The UI no longer labels a locally invented time as the server plan creation time.
Existing V4 functional repairs retained
- DS4 fast request plus one bounded cold-start wake retry.
- External Advisory chain: OpenRouter → Google → Hugging Face.
- HTTP 402 skips the failed provider and continues the chain without retrying the same paid/unavailable provider.
- Sanitized provider-attempt diagnostics in the Advisory page.
- Deprecated Hermes
--insecurestartup option removed. - Empty
max_concurrent_sessionsnormalized. - Eight hash-routed pages with synchronous navigation, Back/Forward, direct hashes,
keyboard navigation,
hidden,inert, and ARIA state synchronization. - Paper execution remains server-revalidated and unavailable for unverified markets.
Real production API bindings verified in source
The production template calls the matching real routes below; it does not generate market/account responses inside the browser:
GET /api/futures/statusGET /api/futures/symbolsGET /api/futures/positionsGET /api/futures/marketPOST /api/futures/analyzePOST /api/futures/paper/executeGET /api/telegram/status
The corresponding Futures/Telegram routes exist in the backend. Chart diagnostics are calculated from the returned real candle array; when candles are unavailable, the diagnostics and chart remain unavailable rather than substituting samples.
Validation results
- Full local test suite: 108 passed.
- Python compilation: passed.
- Inline production JavaScript syntax (
node --check): passed. - Shell syntax for
scripts/entrypoint.sh: passed. - HTML IDs: 119 unique IDs, no duplicates.
- Static DOM-reference audit: passed.
- All ID-bearing interactive controls have production event handlers.
- Production scan found no seeded catalog, random market generator, mock market response, dummy position, or synthetic OHLCV path.
- Populated-secret scan: no production secret value found.
- ZIP integrity check: passed after packaging.
- No Paper, Testnet, or Live trade was executed.
- Paper Execute was not called during verification.
Tests use controlled fixtures/mocks only inside the test directory; those are not production runtime data paths.
Files changed in the V5 UI truthfulness pass
README.mdhermes_overlay/tools/futures_dashboard_api.pyhermes_overlay/tools/templates/hermes_futures_desk_luxury.htmlhermes_overlay/tests/test_futures_dashboard_and_state.pyhermes_overlay/tests/test_luxury_template.pyFIX_REPORT.md
Required post-deployment acceptance
After deploying this exact package, perform an authenticated read-only pass on the Space and verify all eight pages, browser Console/Network, real status/symbol/market responses, 1m/5m/15m/1h chart states, unavailable-state clearing, Back/Forward, and mobile overflow. Do not click Paper Execute during that verification.