From 4fcd2575b8b54aa09ba5a015cc99205801ec8d5f Mon Sep 17 00:00:00 2001 From: "marcin p. joachimiak" <4625870+realmarcin@users.noreply.github.com> Date: Mon, 10 Aug 2026 21:59:31 -0700 Subject: [PATCH] Stop citing a normal-vision failure as an argument for shape (#199, #532) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Running the dataviz rubric's validator — the one check it says never to eyeball — the network palette FAILS the normal-vision floor: Mutualism #56bbe6 and Cross-feeding #57c7ab are ΔE 10.3 apart, below 15, so a full-colour reader cannot reliably separate the two commonest interaction types. The template already knew that number. Its comment cited it as evidence that shape "is what makes two of the commonest types separable at all". That has it backwards: shape rescues the CVD case, and the rubric is explicit that the normal-vision floor is NOT excusable by secondary encoding. The number is a defect, not a justification. No colours changed, because it is not a one-colour fix and a half-fix would trade one failure for another. #56bbe6 -> #2a7fd4 clears the rubric and then fails this repo's own all-pairs gate at ΔE 5.5 against #7f30cf under deuteranopia. #edab12 -> #b8860b clears the lightness band and lands ΔE 1.5 from Commensalism — a pair the validator never compared, because it only checks adjacent entries and those two are not neighbours. The two gates use different metrics over different pair sets: OKLab ΔE×100 adjacent-pairs against CIELAB ΔE76 all-pairs. Optimising against either alone produces a change that looks verified and is not. A search over 775 single candidates and ~207k saturated warm pairs found nothing clearing both without either re-introducing a blue-blue adjacency or reading grey. So nine mutually separable saturated hues is at or past what the space allows, which is what the rubric means by folding a ninth series into "Other". The fix is structural. The comment now says so, with the measurements, so the next attempt starts from them. Co-Authored-By: Claude Opus 5 --- src/communitymech/templates/community.html | 33 +++++++++++++++++----- 1 file changed, 26 insertions(+), 7 deletions(-) diff --git a/src/communitymech/templates/community.html b/src/communitymech/templates/community.html index 3d64663d..dda44006 100644 --- a/src/communitymech/templates/community.html +++ b/src/communitymech/templates/community.html @@ -513,13 +513,32 @@

Taxonomy

{%- set taxon_stroke = "#4a4a4a" -%} {%- set unmapped_color = "#929caa" -%} {#- `symbol` is the redundant channel (#270). Nine categories is past what - colour alone can carry: measured all-pairs, this palette drops to - ΔE 1.8 under tritanopia and 10.3 under NORMAL vision for - Mutualism-vs-Cross-feeding, so shape is not a courtesy to CVD - readers, it is what makes two of the commonest types separable at - all. Circle is reserved for taxa, so every value below is a - non-circle d3 symbol; the bundled d3 v7 ships 14, which is enough - for a 1:1 mapping without doubling up on fill. -#} + colour alone can carry, so shape is not a courtesy to CVD readers. + Circle is reserved for taxa, so every value below is a non-circle d3 + symbol; the bundled d3 v7 ships 14, enough for a 1:1 mapping without + doubling up on fill. + + Shape does NOT, however, excuse the normal-vision floor, and an + earlier version of this comment got that wrong: it cited + Mutualism-vs-Cross-feeding at ΔE 10.3 under NORMAL vision as an + argument FOR shape. Shape rescues the CVD case; a full-colour reader + who cannot separate the two commonest types is a colour problem, and + the dataviz rubric is explicit that secondary encoding does not + excuse it. So that 10.3 is an open defect, tracked in #532, not a + justification. + + It is not a one-colour fix. Re-stepping Mutualism to #2a7fd4 clears + the rubric's normal-vision check and then fails THIS repo's + all-pairs gate at ΔE 5.5 against #7f30cf under deuteranopia — the + two checks use different metrics (OKLab ΔE×100 adjacent-pairs vs + CIELAB ΔE76 all-pairs) and disagree about which pairs are close. + A search over ~200k saturated warm pairs found none clearing both. + Nine mutually separable hues is at or past what the space allows, + which is what the rubric means by folding a 9th series into "Other". + + Do not retune by eye, and do not retune one colour at a time. + `node scripts/validate_palette.js ""` from the dataviz skill + and `tests/test_network_palette.py` must BOTH pass. -#} {%- set interaction_legend = [ {"key": "CROSS_FEEDING", "label": "Cross-feeding", "color": "#57c7ab", "symbol": "symbolDiamond"}, {"key": "MUTUALISM", "label": "Mutualism", "color": "#56bbe6", "symbol": "symbolSquare"},