> ## Documentation Index
> Fetch the complete documentation index at: https://docs.useotto.xyz/llms.txt
> Use this file to discover all available pages before exploring further.

# RH-Season — Robinhood Chain Movers (Rug-Screened)

> How to read Otto's RH-Season feed: what's actually moving on Robinhood Chain (4663), with hard liquidity floors and rug-risk flags so you don't chase a fake-volume honeypot.

**RH-Season** is the base-season analog for **Robinhood Chain (chainId 4663)**: an hourly, rug-screened leaderboard of what's actually moving on RH Chain, each token carrying liquidity floors, rug-risk flags, and trusted-KOL signal. It is a **descriptive screen, never trading advice.**

The feed is free in `/app` and is the same data behind the paid [`/rh-season`](/acp-swarm/x402) endpoint (\$0.001).

## The differentiator: filtered vs. flagged

RH Chain is young and full of \$0-liquidity honeypots that fake seven-figure "volume." RH-Season handles this in two layers:

* **Filtered out entirely** — tokens below a hard liquidity floor (default \~\$10K) or with a wash-volume ratio (24h volume ÷ liquidity) above the hard cap (default \~150×) never appear. They are untradeable; showing them would be dishonest.
* **Surfaced, but flagged** — thin-but-real day-0 movers appear **with their rug-risk flags visible**, so you see the risk instead of having it hidden.

<Note>
  The response's `screenFloors` block carries the **exact** floors in effect for a given refresh (they are env-tunable); treat the defaults above as illustrative and read `screenFloors` for the live values.
</Note>

## How to read the rug-risk flags

Each token carries a `rugRisk` block:

| Flag                     | What it means                                                                                                                                                                                                  |
| ------------------------ | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `liquidityBelowFloor`    | pool liquidity is thin (below the flag threshold, default \~\$50K) — a small sell moves the price hard                                                                                                         |
| `liquidityDrained`       | standing pool reserve is below \~\$1K — effectively emptied post-pump. Forces `level` to `high`. Liquidity fact only, not a scam call. The hard floor normally drops these; flag fires on edge-case bypasses.  |
| `changeWindowUnreliable` | the pool is younger than the 24h measurement window, so `change24hPct` spans its **entire life** (a first-candle artifact — e.g. "+43,000%"), **not** a real 24h move. Render the percentage with this caveat. |
| `volToLiqRatioAnomaly`   | 24h volume is large vs. liquidity (above the flag ratio, default \~20×) — wash-suspect turnover                                                                                                                |
| `newPool`                | the pool is brand new (under \~2 days) — no track record                                                                                                                                                       |
| `cgListed`               | **positive** signal — the token is in CoinGecko's robinhood registry (absence is not disqualifying; CG lags day-old launches)                                                                                  |
| `level`                  | summary verdict: `low` (real liquidity + sane turnover), `elevated` (thin/new), `high` (wash-suspect day-0 or drained reserve)                                                                                 |

The raw `volToLiqRatio` is included so a card can show, e.g., "24h vol = 91× liquidity." Let that number land before the percentage move.

Every response also carries a top-level `disclaimer` string — a machine-readable risk notice that agents and UIs should surface alongside the board: informational only, thin-liquidity environment, verify liquidity and rug flags, data may be up to a few hours stale.

## Read the leaderboard as hours-old

<Note>
  **Most of this leaderboard is hours old.** The feed refreshes hourly (with a hard staleness cap), and on a young chain a token's liquidity can vanish between refreshes. **Check the live liquidity before you act on a percentage move** — a +500% print against \$20K of liquidity is not the same signal as +500% against \$2M.
</Note>

## When social signal is "n/a"

If a token's symbol collides with a major asset or a tokenized-equity ticker (e.g. `\$HOOD`, `\$APE`), cashtag-matched social signal is **not attributable** to the RH-Chain token — so the card shows social signal as **n/a** (`kolSymbolAmbiguous: true`) rather than counting the stock's chatter as the meme's buzz.

## Honesty

* **Descriptive, never advisory.** RH-Season describes what's moving and how risky the liquidity looks; it never says "buy" or "avoid."
* **Degrades honestly.** If the KOL backend is down, the board falls back to a volume-ranked rug-screened screen (no fabricated mention counts or quotes). If the LLM sentiment leg degrades, the summary is blank rather than invented.

## Where it comes from

Sources: GeckoTerminal (liquidity, volume, pools) + Otto's trusted-KOL layer + an LLM sentiment read. Surfaced free in `/app` (warm internal read) and as the paid [`/rh-season`](/acp-swarm/x402) endpoint.
