From 8e51795f7e2e3ba5c1ccc883990b1c61425ca7f7 Mon Sep 17 00:00:00 2001 From: Sebastian Lerner Date: Wed, 26 Aug 2026 22:25:11 +0100 Subject: [PATCH 1/2] Note that unlisted feeds/streams have not been risk-evaluated New feeds/streams aren't in source/Supabase yet and show no market pricing risk category, which reads as evaluated-and-fine. Add a note that an unlisted category means unevaluated, use at your own risk. --- src/content/data-feeds/llms-full.txt | 2 ++ src/content/data-feeds/selecting-data-feeds.mdx | 2 ++ src/features/feeds/components/MarketPricingRiskTiers.astro | 2 ++ src/features/feeds/content/marketPricingRiskTerms.ts | 5 +++++ 4 files changed, 11 insertions(+) diff --git a/src/content/data-feeds/llms-full.txt b/src/content/data-feeds/llms-full.txt index c25c6ab0cf8..67b7d4dbd50 100644 --- a/src/content/data-feeds/llms-full.txt +++ b/src/content/data-feeds/llms-full.txt @@ -3719,6 +3719,8 @@ Data feeds are grouped into the following categories based on the level of marke - [🔵 Custom Feeds](#-custom-feeds) - [⭕ Deprecating](#-deprecating) +If a feed does not display one of these categories, it has not yet been evaluated for market pricing risk. Treat it as unevaluated and use it at your own risk. + +### ⚪ Unrated + +These feeds have not yet been evaluated for market pricing risk. Treat them as unevaluated and use them at your own risk. + ## Market hours In addition to categories, be aware that markets for several assets are actively traded only during certain hours. Listed data feeds include an attribute describing their market hours. Chainlink Labs recommends using these feeds only during their specified hours: diff --git a/src/db/feedCategories.ts b/src/db/feedCategories.ts index c0e5877b092..d5bda96d9b4 100644 --- a/src/db/feedCategories.ts +++ b/src/db/feedCategories.ts @@ -84,6 +84,14 @@ export const FEED_CATEGORY_CONFIG = { title: "Deprecating - These feeds are scheduled for deprecation.", link: "/data-feeds/selecting-data-feeds#-deprecating", }, + unrated: { + key: "unrated", + name: "Unrated", + icon: "⚪", + title: + "Unrated - These feeds have not yet been evaluated for market pricing risk. Treat them as unevaluated and use them at your own risk.", + link: "/data-feeds/selecting-data-feeds#-unrated", + }, } as const export type CategoryKey = keyof typeof FEED_CATEGORY_CONFIG @@ -96,6 +104,7 @@ const TIER_ANCHOR_KEY: Record = { new: "new-token", custom: "custom", deprecating: "deprecating", + unrated: "unrated", } const RISK_DOC_BASE_PATH: Record = { @@ -110,6 +119,10 @@ export function getRiskCategoryLink(key: CategoryKey, product: MarketPricingRisk return `${base}#-deprecating` } + if (key === "unrated") { + return `${base}#-unrated` + } + return `${base}${tierAnchor(TIER_ANCHOR_KEY[key], getMarketPricingRiskTerms(product))}` } diff --git a/src/features/feeds/components/Tables.tsx b/src/features/feeds/components/Tables.tsx index 0b3b54fed89..1673b06e8b9 100644 --- a/src/features/feeds/components/Tables.tsx +++ b/src/features/feeds/components/Tables.tsx @@ -221,6 +221,7 @@ const RISK_TIER_SHORT_LABELS: Record = { new: "New token", custom: "Custom", deprecating: "Deprecating", + unrated: "Unrated", } const normalizeRiskKey = (riskTier?: string | null) => riskTier?.toLowerCase().replace(/\s+/g, "") ?? "" @@ -276,9 +277,14 @@ const RiskCell = ({ }) => { const [tooltipPos, setTooltipPos] = useState | null>(null) const normalizedKey = normalizeRiskKey(riskTier) - const category = normalizedKey ? FEED_CATEGORY_CONFIG[normalizedKey as CategoryKey] : undefined - const tooltipText = category ? getRiskTooltipText(normalizedKey as CategoryKey, product) : "" - const riskLink = category ? getRiskCategoryLink(normalizedKey as CategoryKey, product) : "" + // When no risk tier is available (e.g. no Supabase return), fall back to the + // "Unrated" category so the feed/stream is shown with the ⚪ circle instead of a dash. + const categoryKey = (normalizedKey ? FEED_CATEGORY_CONFIG[normalizedKey as CategoryKey] : undefined) + ? (normalizedKey as CategoryKey) + : "unrated" + const category = FEED_CATEGORY_CONFIG[categoryKey] + const tooltipText = getRiskTooltipText(categoryKey, product) + const riskLink = getRiskCategoryLink(categoryKey, product) useEffect(() => { if (!tooltipPos || typeof document === "undefined") return @@ -309,14 +315,6 @@ const RiskCell = ({ } }, [tooltipPos, tooltipText]) - if (!category) { - return ( - - — - - ) - } - const showTooltip = (event: Event) => { setTooltipPos(getRiskTooltipPosition(event.currentTarget as HTMLElement)) } diff --git a/src/features/feeds/content/marketPricingRiskTiers.ts b/src/features/feeds/content/marketPricingRiskTiers.ts index 59751e22f1a..456956edeb5 100644 --- a/src/features/feeds/content/marketPricingRiskTiers.ts +++ b/src/features/feeds/content/marketPricingRiskTiers.ts @@ -124,6 +124,15 @@ export function getMarketPricingRiskTiers(terms: MarketPricingRiskTerms): Market ], closingParagraphs: [], }, + { + id: "-unrated", + icon: "⚪", + title: "Unrated", + leadParagraphs: [ + `These ${terms.productPlural} have not yet been evaluated for market pricing risk. Treat them as unevaluated and use them at your own risk.`, + ], + closingParagraphs: [], + }, ] } @@ -140,5 +149,6 @@ export function getCategoryListItems(terms: MarketPricingRiskTerms) { { icon: "🆕", label: terms.newTokenListLabel, href: tierAnchor("new-token", terms) }, { icon: "🔵", label: terms.customListLabel, href: tierAnchor("custom", terms) }, { icon: "⭕", label: "Deprecating", href: "#-deprecating" }, + { icon: "⚪", label: "Unrated", href: "#-unrated" }, ] }