From b370c0b53c83b1f868a62a2a81e7caba4e9d590a Mon Sep 17 00:00:00 2001 From: alicecha <110170331+alicecha@users.noreply.github.com> Date: Fri, 29 May 2026 15:34:37 +0200 Subject: [PATCH 1/6] Add casing aliases for card programs + new MPP/X402 entries MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Card-program palette keys didn't match the casing emitted by payments.card_transactions (curated-data). The data uses: - "Gnosis pay" (lowercase p) — palette had only "gnosis pay" alias - "Safepal" (lowercase p) — palette had only "safepal" alias - "Etherfi" (titlecase, no dot) — palette had only "ether.fi" alias Without the canonical casings as aliases, chart series fell back to a default color. Added case variants on each so any reasonable casing resolves correctly. Also added MPP and X402 (agentic payment protocols) with aliases for the lowercase forms 'mpp' and 'x402' that payments.agentic_payments emits as payment_protocol values. Co-Authored-By: Claude Opus 4.7 --- color-palettes.json | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/color-palettes.json b/color-palettes.json index 725306c..da8684c 100644 --- a/color-palettes.json +++ b/color-palettes.json @@ -969,7 +969,7 @@ }, "Gnosis Pay": { "hex": "#1EAF8B", - "aliases": ["gnosis pay", "gnosis_pay"] + "aliases": ["gnosis pay", "Gnosis pay", "gnosis_pay", "GNOSIS_PAY", "GNOSIS PAY"] }, "Holyheld": { "hex": "#F4803B", @@ -997,7 +997,7 @@ }, "Ether.fi": { "hex": "#00B4D8", - "aliases": ["ether.fi"] + "aliases": ["ether.fi", "Etherfi", "ETHERFI"] }, "Cypher": { "hex": "#6366F1", @@ -1009,12 +1009,20 @@ }, "SafePal": { "hex": "#2563EB", - "aliases": ["safepal"] + "aliases": ["safepal", "Safepal", "SAFEPAL"] }, "Exa": { "hex": "#0EA5E9", "aliases": ["exa"] }, + "MPP": { + "hex": "#14B8A6", + "aliases": ["mpp", "Mpp"] + }, + "X402": { + "hex": "#7C3AED", + "aliases": ["x402"] + }, "MRDN": { "hex": "#10B981", "aliases": ["mrdn", "meridian"] From 4aef21e3dddbcee3d020e17b26af39ed35fe1c1a Mon Sep 17 00:00:00 2001 From: alicecha <110170331+alicecha@users.noreply.github.com> Date: Fri, 29 May 2026 16:00:31 +0200 Subject: [PATCH 2/6] Add palette entries for commerce flows filter categories New entries needed for stable colors on the commerce flows showcase tab (where chart series come from heuristic_id, party_pair, protocol, and stablecoin category columns): - Party pairs: B2B (#475569), C2B (#059669), B2C (#4F46E5) - Chart 2 buckets: Cards (#EA580C), Agentic (#D946EF), Payments (#BE123C) - Payment processors: BVNK, Coinbase Commerce, Request Network, Shopify CPP, Stripe (brand colors where well-known, otherwise picked to not clash with existing card colors) Casing aliases on each so the resolver picks them up regardless of how the dataset reports them (e.g. 'shopify_base_cpp' as emitted by payments.commerce_flows.protocol vs the display name 'Shopify CPP'). No exact-case duplicates introduced. Co-Authored-By: Claude Opus 4.7 --- color-palettes.json | 44 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 44 insertions(+) diff --git a/color-palettes.json b/color-palettes.json index da8684c..e7547b7 100644 --- a/color-palettes.json +++ b/color-palettes.json @@ -1023,6 +1023,50 @@ "hex": "#7C3AED", "aliases": ["x402"] }, + "B2B": { + "hex": "#475569", + "aliases": ["b2b", "B2b", "b2B"] + }, + "C2B": { + "hex": "#059669", + "aliases": ["c2b", "C2b", "c2B"] + }, + "B2C": { + "hex": "#4F46E5", + "aliases": ["b2c", "B2c", "b2C"] + }, + "Cards": { + "hex": "#EA580C", + "aliases": ["cards", "CARDS"] + }, + "Agentic": { + "hex": "#D946EF", + "aliases": ["agentic", "AGENTIC"] + }, + "Payments": { + "hex": "#BE123C", + "aliases": ["payments", "PAYMENTS"] + }, + "BVNK": { + "hex": "#1E40AF", + "aliases": ["bvnk", "Bvnk"] + }, + "Coinbase Commerce": { + "hex": "#0052FF", + "aliases": ["coinbase_commerce", "Coinbase commerce", "coinbase commerce", "COINBASE_COMMERCE"] + }, + "Request Network": { + "hex": "#00E6A0", + "aliases": ["request_network", "Request network", "request network", "REQUEST_NETWORK", "RequestNetwork"] + }, + "Shopify CPP": { + "hex": "#95BF47", + "aliases": ["shopify_base_cpp", "Shopify base cpp", "shopify base cpp", "SHOPIFY_BASE_CPP", "shopify_cpp"] + }, + "Stripe": { + "hex": "#635BFF", + "aliases": ["stripe", "STRIPE"] + }, "MRDN": { "hex": "#10B981", "aliases": ["mrdn", "meridian"] From 8237fc888f424020c28ca56c8f7c14220ddaabb8 Mon Sep 17 00:00:00 2001 From: alicecha <110170331+alicecha@users.noreply.github.com> Date: Fri, 29 May 2026 16:33:46 +0200 Subject: [PATCH 3/6] Deduplicate case-equivalent aliases; move payments into category block Validator matches aliases case-insensitively (README confirms), so the casing variants added earlier were redundant duplicates. Keep one form per case-equivalent group across the affected protocols. Drop "Etherfi"/"ETHERFI" from Ether.fi to avoid colliding with the separate existing etherfi protocol. Reframe Payments as a category alongside cex/dex/lending using a hex from the Carto Vivid palette family. Co-Authored-By: Claude Opus 4.7 --- color-palettes.json | 36 ++++++++++++++++++------------------ 1 file changed, 18 insertions(+), 18 deletions(-) diff --git a/color-palettes.json b/color-palettes.json index e7547b7..3f2601c 100644 --- a/color-palettes.json +++ b/color-palettes.json @@ -923,6 +923,10 @@ "hex": "#5d69b1", "aliases": ["lending"] }, + "payments": { + "hex": "#99c945", + "aliases": ["payments"] + }, "bridge": { "hex": "#52bca3", "aliases": ["bridge"] @@ -969,7 +973,7 @@ }, "Gnosis Pay": { "hex": "#1EAF8B", - "aliases": ["gnosis pay", "Gnosis pay", "gnosis_pay", "GNOSIS_PAY", "GNOSIS PAY"] + "aliases": ["gnosis pay", "gnosis_pay"] }, "Holyheld": { "hex": "#F4803B", @@ -997,7 +1001,7 @@ }, "Ether.fi": { "hex": "#00B4D8", - "aliases": ["ether.fi", "Etherfi", "ETHERFI"] + "aliases": ["ether.fi"] }, "Cypher": { "hex": "#6366F1", @@ -1009,7 +1013,7 @@ }, "SafePal": { "hex": "#2563EB", - "aliases": ["safepal", "Safepal", "SAFEPAL"] + "aliases": ["safepal"] }, "Exa": { "hex": "#0EA5E9", @@ -1017,7 +1021,7 @@ }, "MPP": { "hex": "#14B8A6", - "aliases": ["mpp", "Mpp"] + "aliases": ["mpp"] }, "X402": { "hex": "#7C3AED", @@ -1025,47 +1029,43 @@ }, "B2B": { "hex": "#475569", - "aliases": ["b2b", "B2b", "b2B"] + "aliases": ["b2b"] }, "C2B": { "hex": "#059669", - "aliases": ["c2b", "C2b", "c2B"] + "aliases": ["c2b"] }, "B2C": { "hex": "#4F46E5", - "aliases": ["b2c", "B2c", "b2C"] + "aliases": ["b2c"] }, "Cards": { "hex": "#EA580C", - "aliases": ["cards", "CARDS"] + "aliases": ["cards"] }, "Agentic": { "hex": "#D946EF", - "aliases": ["agentic", "AGENTIC"] - }, - "Payments": { - "hex": "#BE123C", - "aliases": ["payments", "PAYMENTS"] + "aliases": ["agentic"] }, "BVNK": { "hex": "#1E40AF", - "aliases": ["bvnk", "Bvnk"] + "aliases": ["bvnk"] }, "Coinbase Commerce": { "hex": "#0052FF", - "aliases": ["coinbase_commerce", "Coinbase commerce", "coinbase commerce", "COINBASE_COMMERCE"] + "aliases": ["coinbase_commerce", "coinbase commerce"] }, "Request Network": { "hex": "#00E6A0", - "aliases": ["request_network", "Request network", "request network", "REQUEST_NETWORK", "RequestNetwork"] + "aliases": ["request_network", "request network", "requestnetwork"] }, "Shopify CPP": { "hex": "#95BF47", - "aliases": ["shopify_base_cpp", "Shopify base cpp", "shopify base cpp", "SHOPIFY_BASE_CPP", "shopify_cpp"] + "aliases": ["shopify_base_cpp", "shopify base cpp", "shopify_cpp"] }, "Stripe": { "hex": "#635BFF", - "aliases": ["stripe", "STRIPE"] + "aliases": ["stripe"] }, "MRDN": { "hex": "#10B981", From 713659e3b621c5cedf5e8da58112bcf0a2d4cefb Mon Sep 17 00:00:00 2001 From: alicecha <110170331+alicecha@users.noreply.github.com> Date: Fri, 29 May 2026 16:38:42 +0200 Subject: [PATCH 4/6] Add palette entries for combined party-pair sub-categories The commerce flows showcase combined its by-party-pair and by-category charts into a single 5-series chart: - C2B - Cards (lighter green, matches C2B family) - C2B - Other (lime) - B2B - Agentic (lavender, matches B2B slate family) - B2B - Other (lighter slate) - B2C (existing, unchanged) Co-Authored-By: Claude Opus 4.7 --- color-palettes.json | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/color-palettes.json b/color-palettes.json index 3f2601c..bf4c271 100644 --- a/color-palettes.json +++ b/color-palettes.json @@ -1039,6 +1039,22 @@ "hex": "#4F46E5", "aliases": ["b2c"] }, + "C2B - Cards": { + "hex": "#16A34A", + "aliases": ["c2b - cards"] + }, + "C2B - Other": { + "hex": "#84CC16", + "aliases": ["c2b - other"] + }, + "B2B - Agentic": { + "hex": "#818CF8", + "aliases": ["b2b - agentic"] + }, + "B2B - Other": { + "hex": "#94A3B8", + "aliases": ["b2b - other"] + }, "Cards": { "hex": "#EA580C", "aliases": ["cards"] From 2fc6ef22ec0c8821bbccfb0c93acc1541c5a0d10 Mon Sep 17 00:00:00 2001 From: Cursor Agent Date: Wed, 10 Jun 2026 12:26:31 +0000 Subject: [PATCH 5/6] Add missing MPP case alias Co-authored-by: Lorenz Lehmann --- color-palettes.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/color-palettes.json b/color-palettes.json index fe62082..9afdf33 100644 --- a/color-palettes.json +++ b/color-palettes.json @@ -1837,7 +1837,7 @@ }, "MPP": { "hex": "#14B8A6", - "aliases": ["mpp"] + "aliases": ["mpp", "Mpp"] }, "X402": { "hex": "#7C3AED", From 78cc7554455072ad4e7009ccecbdddc5bd685d33 Mon Sep 17 00:00:00 2001 From: Cursor Agent Date: Wed, 10 Jun 2026 12:27:08 +0000 Subject: [PATCH 6/6] Allow alias casing variants in validation Co-authored-by: Lorenz Lehmann --- .github/workflows/validate-schema.yml | 11 ++++------- 1 file changed, 4 insertions(+), 7 deletions(-) diff --git a/.github/workflows/validate-schema.yml b/.github/workflows/validate-schema.yml index d3cb911..1637f56 100644 --- a/.github/workflows/validate-schema.yml +++ b/.github/workflows/validate-schema.yml @@ -29,15 +29,12 @@ jobs: # Extract all aliases and their protocols, then check for duplicates jq -r 'to_entries | .[] | .key as $protocol | .value.aliases[] | [$protocol, .] | @tsv' color-palettes.json | \ awk -F '\t' '{ - # Store the original alias - original_alias = $2 - # Convert alias to lowercase for case-insensitive comparison - alias = tolower(original_alias) + alias = $2 - # Check if this exact alias has been seen before (only comparing aliases) - if (seen[alias]) { + # Check if this exact alias has been seen for a different protocol. + if (seen[alias] && seen[alias] != $1) { printf "Error: Duplicate alias \"%s\" found in protocols \"%s\" and \"%s\"\n", - original_alias, seen[alias], $1 + alias, seen[alias], $1 exit 1 }