diff --git a/benchmarks/terminal-fill-quality.yml b/benchmarks/terminal-fill-quality.yml
index 1b6ed21d7..4be396b1a 100644
--- a/benchmarks/terminal-fill-quality.yml
+++ b/benchmarks/terminal-fill-quality.yml
@@ -186,6 +186,7 @@ metric_panels:
tab: false
description: "Priced swaps in the rolling window."
+ledger_reliability: false
ledger_columns:
- { label: "Value lost", slot: p50 }
- { label: "Median swap", panel: trade_usd }
diff --git a/src/components/ledger-table.tsx b/src/components/ledger-table.tsx
index 3f43d5456..d4fe54f87 100644
--- a/src/components/ledger-table.tsx
+++ b/src/components/ledger-table.tsx
@@ -123,6 +123,9 @@ export function LedgerTable({
// story), tightens cell padding and keeps the tag and embed button for
// xl screens.
const dense = !!customCols && customCols.length >= 5;
+ // Reliability columns (Success, Errors) only when the success query is a
+ // probe success rate; a publication gate reads 100 % or 0 % everywhere.
+ const showRel = benchmark.ledgerReliability !== false;
const cellPad = dense ? "px-2" : "px-3";
const panelById = useMemo(
() => new Map((benchmark.metricPanels ?? []).map((p) => [p.id, p])),
@@ -363,7 +366,7 @@ export function LedgerTable({
return (
{hasWindows && (
@@ -433,13 +436,15 @@ export function LedgerTable({
>
{customCols ? colLabel(customCols[0]) : activePanel ? "Value" : "p50"}
-
- Reliability
- |
+ {showRel && (
+
+ Reliability
+ |
+ )}
)}
-
- Success
-
- {!dense && (
+ {showRel && (
+
+ Success
+
+ )}
+ {!dense && showRel && (
({
v: colValueW(r, c),
unit: colUnit(c),
@@ -727,6 +735,7 @@ export function LedgerTable({
function Row({
dense = false,
+ showRel = true,
r,
i,
unit,
@@ -747,6 +756,8 @@ function Row({
embedRegion,
embedKind,
}: {
+ /** false: hide the Success and Errors cells (publication-gate benches). */
+ showRel?: boolean;
r: ProviderResult;
i: number;
unit: string;
@@ -902,10 +913,10 @@ function Row({
)}
{isUnresponsive && (
-
+
- Unresponsive
+ {showRel ? "Unresponsive" : "Filling"}
)}
@@ -969,7 +980,7 @@ function Row({
{isOffline ? (
|
)}
- |
- {r.successRate.toFixed(2)}%
- |
- {!dense && (
+ {showRel && (
+
+ {r.successRate.toFixed(2)}%
+ |
+ )}
+ {!dense && showRel && (
{errorCount(r)?.toLocaleString("en-US") ?? "—"}
|
@@ -1082,10 +1095,12 @@ function Row({
{isUnranked ? "—" : fieldValue > 0 ? `${deltaSign}${Math.abs(deltaPct).toFixed(0)}%` : "-"}
)}
-
- {isUnranked ? "—" : `${r.successRate.toFixed(2)}%`}
- |
- {!dense && (
+ {showRel && (
+
+ {isUnranked ? "—" : `${r.successRate.toFixed(2)}%`}
+ |
+ )}
+ {!dense && showRel && (
{isUnranked ? "—" : (errorCount(r)?.toLocaleString("en-US") ?? "—")}
|
diff --git a/src/lib/materialize/load.ts b/src/lib/materialize/load.ts
index 65cd03b73..2f8bf020b 100644
--- a/src/lib/materialize/load.ts
+++ b/src/lib/materialize/load.ts
@@ -172,6 +172,7 @@ export function buildEditorial(
dimensions: spec.dimensions,
aggregateFilters: spec.aggregate_filters,
ledgerColumns: spec.ledger_columns,
+ ledgerReliability: spec.ledger_reliability,
providerNotes: spec.provider_notes,
};
}
diff --git a/src/lib/spec-schema.ts b/src/lib/spec-schema.ts
index 6c4901ee5..69c56a6d0 100644
--- a/src/lib/spec-schema.ts
+++ b/src/lib/spec-schema.ts
@@ -614,6 +614,11 @@ export const SpecSchema = z
* `panel` reads the values of a metric_panels entry by id. The first
* column is the headline (sort key, data bar, mobile column).
*/
+ /** false when the providers' `success` query is a publication gate
+ * (0 or 1) rather than a probe success rate: the ledger then hides
+ * the Success and Reliability columns and describes an unpublished
+ * row as under its threshold, not as a dead endpoint. */
+ ledger_reliability: z.boolean().default(true),
ledger_columns: z
.array(
z
diff --git a/src/types/benchmark.ts b/src/types/benchmark.ts
index 98ed02d7a..424e617c5 100644
--- a/src/types/benchmark.ts
+++ b/src/types/benchmark.ts
@@ -377,6 +377,8 @@ export type Benchmark = {
* so the table headers describe what each slot actually holds. The
* first column is the headline (sort key, data bar, mobile column). */
ledgerColumns?: LedgerColumn[];
+ /** false: the success query is a publication gate; hide Success and Reliability. */
+ ledgerReliability?: boolean;
};
export type LedgerColumn = {
|