# Crypto_Agent Market Snapshot Fundamentals Integration

Use this when continuing Phase 2 of the user's Crypto_Agent/Hyperliquid roadmap.

## Durable pattern

- Keep fundamentals read-only. Public CoinGecko data is context only; it has no execution authority and must not bypass exchange/reconcile/risk gates.
- Add a small adapter (`src/market/fundamentals.py`) rather than mixing HTTP calls into confluence scoring or runtime loops.
- Map exchange symbols to provider IDs explicitly, e.g. BTC→bitcoin, ETH→ethereum, SOL→solana, LINK→chainlink, WLD→worldcoin-wld, SUI→sui, ENA→ethena, BCH→bitcoin-cash, HYPE→hyperliquid.
- Fetch only public market fields: market cap, FDV, volume, rank, 24h/7d change, circulating supply, total supply.
- If CoinGecko fails or returns an unexpected shape, mark fundamentals `status=unavailable` / per-coin `not_loaded`; never guess values.
- Integrate fundamentals into `market_snapshot.v1 -> coins -> <COIN> -> fundamentals` while preserving existing confluence and v76 paper-gate compatibility.
- Do not use fundamentals as a hard live gate until there is measured paper/shadow evidence. They are Phase-2 context and future Phase-3/8 weighting input.

## Verification checklist

- Unit-test provider mapping with a fake transport; no network in unit tests.
- Unit-test that `build_normalized_market_snapshot(..., fundamentals={...})` accepts loaded fundamentals.
- Smoke-test the report with real read-only data and verify `fundamentals.status=loaded` plus loaded fields for BTC/ETH/SOL.
- Run the full test suite before commit/push.
- Keep final user report short: built, verified, live flags, commit, next step.

## Phase-status rule

After CoinGecko fundamentals are wired, Phase 2 is still not fully closed if depth/impact-slippage and TradingView Ideas track-record context remain pending. Call it “fast v1-abgeschlossen” or similar, not live-ready and not fully closed.
