From 5a69832ea1aabe99a2d3a9ced1a2bd9aa8e50da2 Mon Sep 17 00:00:00 2001 From: Jammy2211 Date: Sat, 26 Sep 2026 19:40:58 +0100 Subject: [PATCH] feat(board): nerves palette, neuron mark and board-family slot (PyAutoNerves#172) The Nerves joins the one-tap board family as a read-only config browser: a palette sampled off PyAutoNerves/logo.png (glyph #7523fe; inks #6420e0 7.4:1 on white and #a27aff 6.1:1 on #0d1117), a drawn neuron mark, and `nerves: PyAutoNerves` in policy.yaml boards after Hands, before Gut. Co-Authored-By: Claude Fable 5.1 Claude-Session: https://claude.ai/code/session_01SbKQQHRRgm2b69aT9t7771 --- board/_theme.py | 38 ++++++++++++++++++++++++++++++++++++++ config/policy.yaml | 1 + tests/test_board_theme.py | 21 ++++++++++++++++++--- 3 files changed, 57 insertions(+), 3 deletions(-) diff --git a/board/_theme.py b/board/_theme.py index acaf053..c11995d 100644 --- a/board/_theme.py +++ b/board/_theme.py @@ -105,6 +105,18 @@ "ink_light": "#9a5400", "ink_dark": "#ffa733", "glow": "#ff9201", "hero": ("#372100", "#000000"), }, + # Nerves — sampled off PyAutoNerves/logo.png: the electric-violet neuron + # (#7523fe, the logo's dominant bright colour) over the deep-purple + # vignette (#1d0c30). The glyph colour itself reads at 6.1:1 on white but + # only 3.1:1 on #0d1117, so each scheme gets its own ink off the same hue: + # #6420e0 (7.4:1 on #fff) and #a27aff (6.1:1 on #0d1117). Bluer than the + # Memory violet, as the two logos are. + "nerves": { + "organ": "Nerves", + "tagline": "Signal. Connect. Understand.", + "ink_light": "#6420e0", "ink_dark": "#a27aff", "glow": "#7523fe", + "hero": ("#1d0c30", "#000000"), + }, # Gut — sampled off PyAutoGut/logo.png: the lime glyph (#8ad414, the # logo's dominant bright colour) over the dark-olive vignette (#1f3006). # Lime is far too light to read on white (1.8:1), so the light-scheme ink @@ -289,6 +301,32 @@ '' ), + # Nerves — a neuron: branching dendrites round a nucleated soma, a + # myelinated axon running right into node-tipped terminals, and the + # signal arcs either side of it, inside a closed ring, as on the logo. + "nerves": ( + '' + '' + '' + '' + '' + '' + '' + '' + '' + '' + '' + '' + ), # Gut — a lidded bin with ribs, speed lines entering from the left and # the void badge (a ringed cross) over its lower-right corner, inside a # closed ring, as on the logo. diff --git a/config/policy.yaml b/config/policy.yaml index 784e625..a91bb97 100644 --- a/config/policy.yaml +++ b/config/policy.yaml @@ -171,5 +171,6 @@ board: memory: PyAutoMemory heart: PyAutoHeart hands: PyAutoHands + nerves: PyAutoNerves gut: PyAutoGut organism: PyAutoScientist diff --git a/tests/test_board_theme.py b/tests/test_board_theme.py index fdef417..7b233a5 100644 --- a/tests/test_board_theme.py +++ b/tests/test_board_theme.py @@ -203,7 +203,7 @@ def test_board_links_reads_the_declared_family_in_file_order(): # the order `config/policy.yaml` declares — the ruled organ order. links = _theme.board_links("https://example.invalid") assert list(links) == ["brain", "mind", "cortex", "memory", - "heart", "hands", "gut", "organism"] + "heart", "hands", "nerves", "gut", "organism"] assert list(links) == POLICY_BOARDS assert links["cortex"] == "https://example.invalid/PyAutoCortex/" @@ -225,8 +225,8 @@ def test_board_links_renders_the_family_footer_end_to_end(): footer = _theme.boards_footer( _theme.board_links("https://example.invalid", "heart"), "heart") order = re.findall(r'data-organ="(\w+)"', footer) - assert order == ["brain", "mind", "cortex", "memory", "hands", "gut", - "organism"] + assert order == ["brain", "mind", "cortex", "memory", "hands", "nerves", + "gut", "organism"] def test_board_links_returns_nothing_when_the_config_is_unreadable(): @@ -329,6 +329,21 @@ def test_the_gut_board_is_in_the_family_and_readable(): assert _theme.MARKS["gut"] in _theme.hero("gut", "Dashboard") +def test_the_nerves_board_is_in_the_family_and_readable(): + # PyAutoNerves#172: the Nerves joined the board family — a palette sampled + # off its logo, a drawn neuron mark, accents that pass the contrast bar, + # and a footer slot in the ruled organ order (after Hands, before Gut). + assert "nerves" in POLICY_BOARDS + assert POLICY_BOARDS.index("hands") < POLICY_BOARDS.index("nerves") \ + < POLICY_BOARDS.index("gut") + o = _theme.ORGANS["nerves"] + assert o["organ"] == "Nerves" + assert _contrast(o["ink_light"], "#ffffff") >= 4.5 + assert _contrast(o["ink_dark"], "#0d1117") >= 4.5 + assert "nerves" in _theme.MARKS and "