Spaces:
Sleeping
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/symbols` returns an explicit | |
| `state=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:** | |
| - `apiFetch` detects 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_at` is 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 `--insecure` startup option removed. | |
| - Empty `max_concurrent_sessions` normalized. | |
| - 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/status` | |
| - `GET /api/futures/symbols` | |
| - `GET /api/futures/positions` | |
| - `GET /api/futures/market` | |
| - `POST /api/futures/analyze` | |
| - `POST /api/futures/paper/execute` | |
| - `GET /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.md` | |
| - `hermes_overlay/tools/futures_dashboard_api.py` | |
| - `hermes_overlay/tools/templates/hermes_futures_desk_luxury.html` | |
| - `hermes_overlay/tests/test_futures_dashboard_and_state.py` | |
| - `hermes_overlay/tests/test_luxury_template.py` | |
| - `FIX_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. | |