Exchange
gemini-titan
Severity
MEDIUM
What Our Normalizer Expects
core/src/exchanges/gemini-titan/normalizer.ts:261 accesses raw.liquidity with a string fallback:
// normalizer.ts ~line 261
liquidity: parseFloat(raw.liquidity || '0'),
What The Live API Returns
The live events response contains volume: str and volume24h: str but no liquidity field:
data[].volume: str
data[].volume24h: str
// data[].liquidity — absent
Endpoint tested: GET https://api.gemini.com/v1/prediction-markets/events?limit=2&status=active
Impact
MEDIUM: The || '0' fallback prevents a crash, but all Gemini Titan events/markets will report liquidity: 0 regardless of actual liquidity. This degrades market ranking, filtering by liquidity, and any liquidity-based UI indicators.
Suggested Fix
Map raw.volume to liquidity as a proxy until Gemini Titan exposes a dedicated liquidity field, or remove the liquidity field from Gemini Titan's unified output if the venue doesn't expose it:
liquidity: parseFloat(raw.liquidity || raw.volume || '0'),
Found by automated response shape drift audit
Exchange
gemini-titan
Severity
MEDIUM
What Our Normalizer Expects
core/src/exchanges/gemini-titan/normalizer.ts:261accessesraw.liquiditywith a string fallback:What The Live API Returns
The live events response contains
volume: strandvolume24h: strbut noliquidityfield:Endpoint tested:
GET https://api.gemini.com/v1/prediction-markets/events?limit=2&status=activeImpact
MEDIUM: The
|| '0'fallback prevents a crash, but all Gemini Titan events/markets will reportliquidity: 0regardless of actual liquidity. This degrades market ranking, filtering by liquidity, and any liquidity-based UI indicators.Suggested Fix
Map
raw.volumeto liquidity as a proxy until Gemini Titan exposes a dedicated liquidity field, or remove the liquidity field from Gemini Titan's unified output if the venue doesn't expose it:Found by automated response shape drift audit