Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -95,17 +95,17 @@ export function ChurnCharts({ networkTypes, clients }: ChurnChartsProps): JSX.El
)}
/>
<SeriesCard
title="New peers, by client"
title="Share of each client's peers that were new"
days={clientDays}
yName="Share of peers"
yName="Share of the client's peers"
percent="line"
empty={empty}
series={clientShareLines(byClient, clientDays, row => row.new_peer_count, peers, MIN_CLIENT_PEERS)}
/>
<SeriesCard
title="Seen all 30 days, by network type"
title="Share of each network type's peers seen all 30 days"

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🟢 "each network type" omits the unknown type the table carries

The card only plots the hosting and other rows, but fct_peer_churn_daily also has network_type = 'unknown' (2026-11-10: hosting 6741, other 7275, unknown 5), so "share of each network type's peers" describes more coverage than is drawn. Either add the unknown series or drop "each network type"; the axis wording at 108 ("Share of the type's peers") also reads vaguely without a type named on the card.

days={days}
yName="Share of peers"
yName="Share of the type's peers"
percent="line"
empty={empty}
series={[line('Hosting', stayed('hosting'), palette[0]), line('Other', stayed('other'), palette[1])]}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -55,9 +55,9 @@ export function ReachabilityCharts({ network, clients }: ReachabilityChartsProps
]}
/>
<SeriesCard
title="Dialled, by client"
title="Share of each client's peers that were dialled"
days={clientDays}
yName="Share of peers"
yName="Share of the client's peers"
percent="line"
empty="No consensus peer was counted in this range."
series={clientShareLines(clients, clientDays, row => row.dialled_peer_count, peers, MIN_CLIENT_PEERS)}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -52,9 +52,9 @@ export function SubnetCharts({ clients, coverage, latest, latestDay }: SubnetCha
return (
<div className="grid grid-cols-1 gap-4 xl:grid-cols-2">
<SeriesCard
title="On all 64 subnets, by client"
title="Share of each client's peers on all 64 subnets"

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🟡 subnet share is of metadata responders, not all the client's peers

FctPeerAttnetCountByClClientDaily.peer_count is documented as the peers that answered a metadata request, which is the denominator here, so the value is a share among responders rather than "each client's peers" as titled and on the axis at 57. On 2026-11-10 caplin shows 9/407 = 2.2% while it is 9 of caplin's 727 seen peers (1.2%). Name the population (e.g. "...peers that answered metadata on all 64 subnets") so the card does not overstate the share of a client's peers.

days={days}
yName="Share of peers"
yName="Share of the client's peers"
percent="line"
empty={empty}
series={clientShareLines(clients, days, row => row.attnets_64_peer_count, peers, MIN_CLIENT_PEERS)}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -63,9 +63,9 @@ export function SyncCharts({ rows }: SyncChartsProps): JSX.Element {
]}
/>
<SeriesCard
title="Within a slot of the head, by client"
title="Share of each client's peers within a slot of the head"

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🟡 title and axis name the wrong denominator for head lag

clientShareLines divides by status_peer_count (peers that exchanged status), not peer_count (peers seen), so the card does not show "share of each client's peers" as titled, and the axis at 68 repeats the same claim. On 2026-11-10 caplin reads 414/490 = 84.5% although only 414 of its 727 peers are within a slot (56.9%): the 237 peers that never answered status are silently absent from the denominator. Name the population ("...peers that answered a status request within a slot of the head", axis "Share of the client's status peers") or divide by peer_count if the all-peers share is what is wanted.

days={days}
yName="Share of peers"
yName="Share of the client's peers"
percent="line"
empty={empty}
series={clientShareLines(rows, days, row => row.head_lag_0_1_peer_count, status, MIN_CLIENT_PEERS)}
Expand Down
Loading