notes/reference/strategy.md when enrichment feeds into entry scoring
Rules
Every new client goes behind . Declare budget class + TTL before wiring.
相關技能
ProviderBudgetService
Caches must have per-source TTL (Trench 10 m, Bubblemaps 30 m, Solsniffer 15 m, Pump.fun 60 s, Jupiter 1 h, GeckoTerminal 5 m, DefiLlama 15 m, Cielo 60 s, Creator 6 h).
Provider-heavy logic always reuses the shared client — never call providers directly from evaluators or UI.
Feature-flag every new provider until phase 3 ships (settings.enrichment.<source>.enabled).
Bundle stats primary is Trench.bot; Padre.gg fallback; self-build via Helius only as last resort (≈50–100 credits/token).
Any new field surfaced on the dashboard must have a corresponding EnrichmentFact.factType enum value.
Rate limits: Trench public (be polite), Bubblemaps public JSON, Solsniffer freemium ≤10/min, GeckoTerminal 30/min, Pump.fun public.
Failure modes
Calling providers bypassing the budget service → silent credit burn.
Missing TTL → stale security flags shown as current.
Using EnrichmentFact.payload JSON as a column-replacement (promote fields that Grafana filters on).
Wiring Trench into evaluator without a fallback when the API is down.
Treating Solsniffer and Rugcheck as redundant — they catch different classes of risk; keep both.