# SIMD-CHAT: trading workspace improvement plan

Research date: **14 October 2026**. Target: [Pulse / launch-1280-simd-chat-build-custom-web](https://github.com/identity-md-launches/launch-1280-simd-chat-build-custom-web), reviewed at commit `8220e881d0f5809b46132c04d31d72b793a2fcfc`.

**Recommendation:** extend Pulse’s existing indicators rather than rebuild them. First fix historical coverage and streaming data integrity; then add volume/order-flow analysis, cost-aware portfolio risk, and dedicated intraday/swing workspaces. Add wallet-cohort analytics as an optional context layer after those foundations work.

These features can support better-informed trading and evaluation of profitability after costs. **The research does not establish a profitable strategy or demonstrate that any reference app improves returns.** All thresholds below are proposed, editable research defaults, not validated trade recommendations.

## 1. Evidence and reference-app analysis

Labels used throughout: **Fact** = inspected source or documented API behavior; **Product claim** = first-party description, not independently exercised; **Inference** = interpretation of evidence; **Proposal** = implementation recommendation; **Unknown** = unverified or unavailable information. All linked sources were accessed on the research date. Dynamic product pages are not immutable snapshots.

| Reference | Attributable findings | Implication for Pulse; limitations |
| --- | --- | --- |
| [Shortened reference](https://t.co/NDmUcyttbE) → [LiquidityMapperFast](https://liquiditymapperfast.github.io/) | **Fact:** direct HTTP retrieval followed the redirect to this site. Its [repository README](https://github.com/liquiditymapperfast/liquiditymapperfast.github.io/blob/a9826a27763b7ed4a417e7f071a17e994ef58e13/README.md) documents a recorded-depth heatmap, aggregated order-book ladder, executed-volume footprint, price profile, open interest, CVD, VWAP controls, saved layouts and replay. The repository identifies an MIT license. **Product claim:** these capabilities operate across multiple public exchange feeds. | **Inference:** executed flow and displayed liquidity give different information and should occupy separate panels. Intraday priorities are spread, depth, taker delta and volume at price; swing priorities are longer-history levels and positioning. The README explicitly distinguishes resting orders that can disappear from executed trades and notes recording limits. Do not equate the liquidity heatmap with verified liquidation events. No live feed accuracy or replay correctness was tested here. |
| [OpenMarket shared chart](https://openmarket.xyz/chart/v7mi0CgA) | **Fact:** HTTP retrieval returned a JavaScript application shell describing multi-market charting and order flow; the web reader could not extract the chart. **Product claim:** the publisher’s [Google Play listing](https://play.google.com/store/apps/details?id=xyz.openmarket.app) describes RSI/MACD panes, saved drawings, multi-chart layouts, live watchlist price/volume/change, Book/Delta/DOM views, search, price alerts and configurable workspaces/timezones. It also describes paid limits for some capabilities. | **Inference:** adopt linked timeframes, saved layouts, drawings, watchlists and concise alerts. These reduce navigation during intraday monitoring and support swing review across assets. **Unknown:** the exact symbol, indicator settings and saved layout in `v7mi0CgA` were not recovered. The listing describes the product, not proof that this shared web chart exposes every listed capability. Public application source and reuse license were not verified. |
| [Hyperdash cohorts](https://hyperdash.com/explore/cohorts) | **Fact:** the requested page exposes all-time PnL/account-size grouping and navigation to tracked wallets and realized-PnL rankings. A separate [first-party terminal page](https://hyperdash.com/?chart1=xyz%3AEUR) exposes cohort long/short notional, trader counts, unrealized-PnL breakdowns, position changes and position-level funding/liquidation fields. These are observed page fields, not audited live values. | **Inference:** compare exposure by profitability and size instead of treating all wallets equally. Position changes may contextualize intraday moves; persistent positioning and funding may contextualize swing trades. **Unknown:** cohort membership completeness, profitability accounting, refresh guarantees and a supported Hyperdash data API were not established. Public source/license was not verified. Large profitable wallets can hedge elsewhere; their visible position is not a complete strategy. |

The brief calls the references open source. This review verified a public MIT-identified repository for **LiquidityMapperFast only**; it does not extend that finding to OpenMarket or Hyperdash. Use the latter as feature references, not assumed reusable code or licensed data feeds.

## 2. Target baseline and specific gaps

**Fact — documented baseline:** Pulse is a React/TypeScript research and paper-trading app with an optional Python/FastAPI/CCXT/SQLite service. It already includes candlesticks, volume, RSI(14), MACD(12,26,9), UTC session VWAP, sentiment rules, backtesting and position sizing. Live mode polls every 30 seconds; the default dataset is synthetic. Paper orders form a journal, not a balance-reserving portfolio with monitored exits. See the [pinned target README](https://github.com/identity-md-launches/launch-1280-simd-chat-build-custom-web/blob/8220e881d0f5809b46132c04d31d72b793a2fcfc/README.md).

**Fact — source inspection:** [engine.ts](https://github.com/identity-md-launches/launch-1280-simd-chat-build-custom-web/blob/8220e881d0f5809b46132c04d31d72b793a2fcfc/src/lib/engine.ts) implements Wilder-smoothed RSI, first-value-seeded EMAs, typical-price candle VWAP, and an ATR stop suggestion using a simple mean of 14 true ranges. Position sizing excludes transaction costs. The signal evaluator uses sentiment and RSI; displayed MACD/VWAP are not entry conditions. [Chart.tsx](https://github.com/identity-md-launches/launch-1280-simd-chat-build-custom-web/blob/8220e881d0f5809b46132c04d31d72b793a2fcfc/src/Chart.tsx) aggregates supplied candles to 5m/15m/1h/4h.

**Fact — data coverage:** [providers.py](https://github.com/identity-md-launches/launch-1280-simd-chat-build-custom-web/blob/8220e881d0f5809b46132c04d31d72b793a2fcfc/service/providers.py) fetches at most 720 five-minute Kraken candles and removes unclosed candles. Kraken confirms its [OHLC endpoint](https://docs.kraken.com/api-reference/market-data/get-ohlc-data) is limited to the latest 720 entries; `since` cannot retrieve older entries. **Inference:** roughly 60 hours produces only about 15 four-hour buckets, with boundary buckets potentially incomplete. This is inadequate for a 26-period MACD slow EMA and barely supplies RSI warm-up. A longer chart viewport alone cannot fix it.

**Fact — collection limits:** the [service README](https://github.com/identity-md-launches/launch-1280-simd-chat-build-custom-web/blob/8220e881d0f5809b46132c04d31d72b793a2fcfc/service/README.md) documents no background collector, 90-day history retention, capped CSV exports, optional owner-configured on-chain scoring, and social/news evaluation timestamps distinct from publication times. **Proposal:** separate source observation time, ingestion time and evaluation time, and collect independently of browser visibility.

## 3. Indicator specification

Everything in this section is a **proposal**, including formula conventions, thresholds and priorities. P0 is a prerequisite; P1 is the core release; P2 is optional advanced analysis. These are decision-support inputs, not automatic buy/sell instructions.

| Priority / change | Exact calculation and controls | Intended use |
| --- | --- | --- |
| P0: common calculation contract | Use venue-specific closed candles for rules; label live forming candles separately. Key calculations by venue, market type, instrument, interval and parameters. Return `null` with a reason during warm-up/gaps. Require complete constituent bars before marking aggregated bars closed. Never bridge unknown gaps silently. | Prevent chart/rule disagreement and misleading higher-timeframe signals. |
| P1: extend existing RSI | Keep Wilder RSI(14) on closes: average positive/negative changes with smoothing α=1/14; `100−100/(1+avgGain/avgLoss)`. Seed from 14 changes; flat series=50, gains-only=100, losses-only=0. Editable length and 30/50/70 guides; cross alerts on closed bars. | Intraday momentum on 5m/15m; swing momentum on 4h/1d. A 70 reading alone must not trigger a short. Formula context: [TradingView RSI documentation](https://www.tradingview.com/support/solutions/43000502338-relative-strength-index-rsi/). |
| P1: extend existing MACD | `EMA12(close)−EMA26(close)`; signal=EMA9(MACD); histogram=MACD−signal. Keep first-value EMA seeding for compatibility, explicitly document it, and suppress signals until 130 closed bars are loaded. Expose periods and zero/signal-cross alerts. | Momentum confirmation; display the rule’s actual timeframe. Default structure matches [TradingView MACD documentation](https://www.tradingview.com/support/solutions/43000502344-moving-average-convergence-divergence-macd-indicator/); seeding/warm-up are this plan’s choices. |
| P1: extend VWAP | Preserve candle approximation `Σ[((H+L+C)/3)×V]/ΣV`; add trade-exact `Σ(price×quantity)/Σquantity` when full trades exist. Label the method. Reset at 00:00 UTC; add weekly reset Monday 00:00 UTC and user-selected anchor. Return unavailable if total volume is zero or anchor coverage is missing. | Session execution context intraday; event/weekly reference for swings. Do not recompute session VWAP from only the visible window. Formula context: [TradingView VWAP documentation](https://www.tradingview.com/support/solutions/43000502018-volume-weighted-average-price-vwap/). |
| P1: EMA trend overlays and levels | Add EMA20/50/200 on closes, α=2/(N+1), first-close seed. Require 5×N history bars before strategy use; earlier display must be marked provisional. Add prior UTC day/week high, low and close. | 1h context beside 5m execution; daily trend beside 4h swing entries. Levels are reference prices, not guaranteed support/resistance. |
| P1: ATR and volatility | Add Wilder ATR(14): TR=max(H−L, abs(H−previous close), abs(L−previous close)); seed mean of first 14 TRs then α=1/14. Display ATR and ATR/close×100. Offer editable 2×ATR initial stop. Version the old simple-mean method to preserve saved results. | Scale stop distance to observed volatility; use the selected strategy timeframe, not always 5m. |
| P1: volume analytics | Show base and quote volume with units and exact/estimated labels. Add RVOL20=`closed-bar volume / mean(previous 20 closed-bar volumes)`, excluding current bar from denominator. Default unusual-volume alert >1.5; zero denominator=unavailable. Add buy/sell taker volume and delta=B−S. | Distinguish low-participation moves from volume expansion. Do not color candle volume as if it were measured buy/sell flow. |
| P2: cumulative volume delta and footprint | CVD=cumulative taker buys minus taker sells, separately per venue and spot/perp; daily reset at UTC midnight. Show coverage start and discontinuities. Footprint bins use configurable multiples of venue tick size, with executed buy/sell volume at each price. | Inspect aggressive flow around breakouts. Unknown aggressor sides remain unclassified; no fabricated tick-rule equivalence. |
| P2: volume profile and liquidity | Build session/anchored trade-volume histogram by price. POC=largest-volume bin; ties choose lower price. Expand from POC toward the larger adjacent bin until ≥70% volume is covered (tie: lower bin first), yielding VAL/VAH. Separately display L2 depth, spread bps and `(bidNotional−askNotional)/(bidNotional+askNotional)` within ±10/25/50 bps of mid. Zero denominator=unavailable. | Distinguish executed volume-at-price from currently resting orders. Mark bands incomplete when subscribed depth does not span them; do not infer absent liquidity. |
| P2: perpetual context | Display mark/oracle prices, funding with its settlement interval, OI in native units and quote notional, and 1h/24h OI changes. Record historical samples; calculate changes only with matching coverage. | Funding estimates carrying costs for swings; OI contextualizes participation. Price/OI combinations do not prove new longs versus new shorts. |

**Example research presets:** Intraday uses 5m execution/1h context, session VWAP, RSI14, RVOL20, spread/depth and ATR14. Swing uses 4h execution/1d context, EMA20/50/200, MACD, weekly/anchored VWAP and ATR; funding appears only for perpetuals. Users can save rules such as “closed price crosses above session VWAP and RVOL20>1.5,” but the UI must show every condition and missing dependency. Backtest each incremental filter; adding correlated indicators is not evidence of stronger predictive power.

## 4. Real-time and historical data plan

Keep FastAPI as the owner-operated aggregation service and React as the client. The following **proposed** schedule is an engineering starting point, not a provider latency guarantee.

| Data | Verified source / contract | Proposed integration and limitations |
| --- | --- | --- |
| Spot candles and trades — P0/P1 | Kraken public `wss://ws.kraken.com/v2`, [OHLC](https://docs.kraken.com/exchange/api-reference/spot-websocket-v2/ohlc) and [trade](https://docs.kraken.com/exchange/api-reference/spot-websocket-v2/trade) channels. Trades provide taker side, price, quantity and per-book trade ID. REST `/0/public/OHLC` bootstraps recent bars. | Subscribe for selected markets, persist trades/candles server-side, and push updates to the browser. Render at most 4 times/second; evaluate rules at candle close. Use 1m inputs for intraday and native 1h/1d history for longer horizons. Fetch actual instrument metadata; unsupported pairs stay unavailable. Public market reads need no trading credentials. |
| Spot order book — P2 | Kraken [L2 book](https://docs.kraken.com/exchange/api-reference/spot-websocket-v2/book) provides snapshots, ordered price-level updates and top-10 CRC32 checksum; depth options include 100 levels. | Start at depth 100. Apply every update in message order, delete zero quantities, maintain decimal precision, validate checksum, and resubscribe on corruption. Record sampled depth for heatmaps; display recording start and gaps. Never backfill historical depth from the current snapshot. |
| Perpetuals — P2 | Hyperliquid [WebSocket subscriptions](https://hyperliquid.gitbook.io/hyperliquid-docs/for-developers/api/websocket/subscriptions) document `trades`, `candle`, `l2Book` and `activeAssetCtx`; [perpetual info API](https://hyperliquid.gitbook.io/hyperliquid-docs/for-developers/api/info-endpoint/perpetuals) documents `POST https://api.hyperliquid.xyz/info`, `metaAndAssetCtxs` and `clearinghouseState`. | Stream the chosen perpetual separately from spot. Poll contexts every 30 seconds as recovery fallback; store OI/funding samples. Resolve instrument/dex identities from metadata. Treat book messages according to this provider’s schema, not Kraken’s delta/checksum protocol. No wallet needed for public market data. |
| Wallet cohorts — P2, conditional | Hyperliquid exposes account state for a supplied address; this does **not** itself establish a complete, ranked wallet universe or reproduce Hyperdash cohorts. | First support an owner-entered public-address watchlist, disabled until configured. Read positions/equity every 60 seconds with a bounded scheduler; never request signing keys for tracking. Full-market cohorts require a permitted historical indexer and explicit accounting methodology. Do not depend on scraped or undocumented Hyperdash endpoints. |
| Social/news/on-chain — P1 | Existing [service adapters and documented configuration](https://github.com/identity-md-launches/launch-1280-simd-chat-build-custom-web/blob/8220e881d0f5809b46132c04d31d72b793a2fcfc/service/README.md): TwitterAPI.io, CoinDesk/Cointelegraph RSS, optional TypeSafe evaluation and an owner-set on-chain adapter. | Keep as slower context: suggested 120-second news and 300-second social refresh, within account quotas. Display publication/observation time, retrieval time, source, sample count and methodology. Deduplicate stories/posts, show disagreement and author concentration. Missing credentials disable that source; never invent scores. Provider access, costs and permitted retention need deployment-time verification. |

**History is a separate deliverable.** Bootstrap native higher intervals, then store continuously. For EMA200 strategy use, load at least 1,000 bars at the selected interval, including history before the evaluation range. Kraken’s 720-entry REST limit means additional history requires an independently verified historical dataset/import or accumulated recordings. Extend the CSV importer with venue, interval, provenance and coverage metadata; do not promise years of history from repeated `since` requests. Disable unavailable indicators rather than approximate a daily EMA from 60 hours of five-minute data.

**Transport/data contract:** add a versioned `/api/v2/stream` WebSocket plus `/api/v2/history` REST query by instrument, interval and range. Include `schemaVersion`, `venue`, `marketType`, `instrument`, `eventTime`, `receivedAt`, `isClosed`, `quality`, units and event ID in each event. Represent prices/quantities as decimal strings at ingestion. Persist raw events needed for replay and derived OHLCV separately; deduplicate with provider-specific identities: venue/instrument/trade ID for Kraken; venue/block time/coin/trade ID for Hyperliquid, whose documented trade ID alone is not globally unique. Store rule/version/input references with every alert and paper fill.

**Failure handling:** reconnect with jittered exponential backoff capped at 30 seconds; recover snapshots/history before emitting fresh rules. Distinguish a quiet market from a disconnected feed using heartbeats and exchange status. Proposed stale limits: 10 seconds since healthy market transport, 90 seconds for 30-second context polling, 15 minutes for sentiment; each remains editable and visible. If trade recovery is incomplete, break CVD continuity. An incomplete session VWAP stays labeled partial. Existing live/synthetic separation must survive every failure path.

Use provider-aware shared rate budgets and bounded subscription counts; honor throttling instead of launching one poll loop per chart. Hyperliquid publishes [REST weights and WebSocket limits](https://hyperliquid.gitbook.io/hyperliquid-docs/for-developers/api/rate-limits-and-user-limits); reread these during implementation. Measure event-to-client latency and last observation age separately. Proposed initial retention: 7 days raw trades, 24 hours sampled depth, 5 years candles/derived features, configurable disk quotas. Mark storage truncation explicitly. Secrets remain server-side; public hosting needs authentication and exact allowed origins.

## 5. Risk, portfolio and validation features

These are **proposals** for research/paper trading. Live execution is a separate future scope.

1. **Cost-aware position sizing (P1).** Require equity, free cash, direction, entry, stop, target, fee rates and slippage assumption. For a linear instrument, define loss per unit as `abs(entry−stop) + entry×entryFee + stop×exitFee + estimatedAdverseSlippagePerUnit + adverseFundingAllowancePerUnit`. Size by `equity×riskFraction / lossPerUnit`, capped by free cash including entry fees, instrument constraints and portfolio limits. Round quantity down to lot size; recompute planned loss and net reward/risk afterward. Model inverse contracts separately; disable them until supported. Never describe planned stop loss as a guaranteed maximum loss.
2. **Portfolio limits (P1).** Suggested editable defaults: 0.5% equity risk per trade, 2% aggregate open stop risk, 2% daily loss lockout and 25% single-asset notional cap for the unlevered paper account. At UTC day start, store equity; daily loss includes realized and marked unrealized PnL adjusted for deposits/withdrawals. Breaching limits blocks new paper entries but permits exits. Show correlated asset concentration alongside individual limits. Journal any limit changes.
3. **Paper position lifecycle (P1).** Reserve cash; track open, partially closed and closed positions, costs and equity. Simulate stops/targets, trailing stops and partial exits with an explicit fill model. Use side-correct bid/ask or adverse spread/slippage estimates; do not fill at midpoint by default. Preserve the current journal as an importable legacy record, not silently reclassify it as an executed portfolio. Add planned-versus-realized R, maximum adverse/favorable excursion and exit reason.
4. **Perpetual risk (P2).** Add margin mode, account equity, leverage, funding projection and exchange-reported liquidation price where available. Label funding projections as scenarios. Liquidation distance and a stop order are different concepts; a stop may fail before liquidation during gaps. Disable new paper entries if required margin data is unavailable. Keep derivatives separate from unlevered spot accounting.
5. **Validate profitability claims (P1/P2).** Extend Strategy Lab with chronological train/validation/test partitions and walk-forward evaluation; preserve an untouched final test period. Compare with cash and a cost-matched buy-and-hold benchmark. Report net expectancy per trade, profit factor, drawdown, turnover, exposure, trade count and cost sensitivity. Retain next-open fills and conservative same-bar stop/target ordering. Historical sentiment must use what was available then; cohort membership must be assigned as of then, never selected using future winners. Report inconclusive results and small samples plainly.

## 6. UI improvements and cohort design

**P1 proposal — two saved workspaces.** Intraday: watchlist left; linked 5m/1h charts center; optional book/flow right; risk ticket and paper positions below. Swing: linked 4h/1d charts, trend/weekly levels, news context and portfolio exposure. On narrow screens show one chart and tabbed Context/Risk/Positions panels. Save per-workspace indicators, parameters, symbol links, pane sizes and timezone; retain UTC internally.

Give each chart a persistent venue, spot/perp label, timeframe, last-data age and Demo/Live/Replay badge. Link crosshairs by timestamp; make price precision follow instrument tick size. Add keyboard-accessible drawings, search, zoom/reset and indicator settings with text equivalents. Use labels/icons alongside color; support reduced motion. Distinguish provisional bars, incomplete history and stale values directly in their panels.

**P1 proposal — alerts.** Add price crosses, closed-bar indicator conditions, RVOL, freshness failure and risk-limit alerts. Persist an event ID and cooldown; suppress duplicate alerts after reconnect. Start with in-app history and opt-in browser notifications. Server-side evaluation can continue with the browser closed, but browser notifications alone do not guarantee closed-app delivery. Push/email delivery requires a separately configured channel. Each alert links to the triggering chart and recorded inputs.

**P2 proposal — transparent cohort context.** For an explicitly defined address universe, show membership date, window, sample count, coverage, total long/short notional, median leverage and largest-wallet share. Display notional-weighted long share `L/(L+S)` separately from wallet-count share; return unavailable when denominator is zero. Proposed profitability buckets: trailing-90-day net realized PnL after fees/funding, positive/zero/negative, with unrealized PnL separate. Proposed size buckets: <10k, 10k–100k, 100k–1m, ≥1m USD equity, with lower bounds inclusive. These are Pulse definitions, not claims about Hyperdash’s classification. Hide profitability grouping until sufficient history exists. Show concentration and survivorship/selection limitations; do not label the result a probability or enable automatic copying.

## 7. Developer work packages and acceptance gates

Paths below are concrete **proposed changes** to the reviewed repository; no target-app implementation is included in this report.

| Order | Work package / integration points | Acceptance gate |
| --- | --- | --- |
| P0 — data correctness | Extend `service/providers.py`, `service/store.py`, `service/main.py`, `src/types.ts`, `src/lib/validation.ts`; add `service/collectors/` and history coverage metadata. | Real fixture stream reconstructs expected candles; incomplete 4h boundary buckets never become finalized signals. Duplicates, reordered arrivals, reconnects and stale transport produce deterministic quality states. UI never replaces failed live data with demo data. |
| P1 — indicators and history | Refactor `src/lib/engine.ts`; extend `src/Chart.tsx`, `src/pages/Backtest.tsx`; add `src/lib/indicators/` and versioned configuration. | Independent numerical fixtures cover flat/up/down RSI, MACD seed/warm-up, ATR smoothing, zero-volume VWAP, UTC reset/anchor, RVOL denominator, and gaps. Same timestamp/parameters produce identical chart and strategy values. Missing EMA200 history blocks that condition. |
| P1 — risk and portfolio | Extend `src/pages/Risk.tsx`, `src/pages/Signals.tsx`, storage/types; add a paper portfolio ledger. | Hand-calculated long/short sizing cases include fees, lot rounding and cash caps. Gap stops may exceed planned loss. Portfolio limits block entries and allow exits. Journal export/import preserves balances, costs and rule versions. |
| P1 — workflow and alerts | Extend `src/App.tsx`, chart/components/styles and Connections; add workspace/alert state. | Save/reload both layouts; linked charts preserve venue/timeframe. Keyboard and 360px-width workflows remain usable. One qualifying event creates one alert across reconnects. Stale-feed badges and disabled rules identify the reason. |
| P2 — flow and perpetuals | Add Kraken book reconstruction, trade aggregation, recorded-depth replay and a Hyperliquid adapter; optional worker-backed chart layers. | Checksum failure causes resnapshot; unknown depth is not zero depth. CVD gaps remain visible. Spot/perp and base/quote units never merge silently. Replay displays only data observed by replay time. Benchmark four active charts under a recorded busy feed and document hardware/latency. |
| P2 — cohorts | Add optional public-address configuration, historical accounting and point-in-time cohort storage. | No invented addresses or full-market coverage claims. Incomplete histories cannot receive profit rankings. Aggregate totals reconcile to constituent positions; concentration and coverage are visible. |

Release P1 only after deterministic replay/fixture tests, responsive/accessibility checks and a bounded public-feed smoke test pass. Provider uptime and profitable performance require separate evidence; passing tests proves neither.

## 8. Unanswered questions and review limits

The report can be implemented incrementally without resolving every question. Leave optional providers and wallet tracking disabled until configured.

- **Owner decision:** intended venues, region eligibility, spot versus perpetual use, supported instruments and personal risk caps. Preserve the current spot/paper mode until explicitly changed.
- **Owner decision:** hosting/uptime budget, paid social/history/indexer allowance, data-retention constraints and notification channel. These determine historical coverage and closed-browser delivery.
- **Evidence gap:** OpenMarket’s exact shared chart contents, and public source/reuse licenses for OpenMarket/Hyperdash. Obtain documentation or permitted access before code reuse or product-specific integration.
- **Evidence gap:** Hyperdash cohort accounting, full wallet universe and supported API terms. A limited owner watchlist is feasible but must not be presented as equivalent coverage.
- **Research limit:** HTTP/page and selected source-file inspection only; no account login, interactive browser audit, exchange orders, paid feeds, measured live-feed latency or strategy performance experiment. The current source is identified by commit; deployed behavior may differ.

**Checks performed for this deliverable:** verified the shortened-link destination with HTTP retrieval; inspected pinned target calculation/chart/provider files and service documentation; checked current primary provider documentation and first-party product descriptions; checked Markdown structure, source-link syntax, required sections and output encoding locally. These are author checks, not independent factual certification. Future acceptance gates above have not been run.
