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
21 changes: 18 additions & 3 deletions board/_theme.py
Original file line number Diff line number Diff line change
Expand Up @@ -68,30 +68,35 @@
# vignette: a tinted lift behind the wordmark falling to near-black.
ORGANS = {
"broca": {
"function": "Assistants",
"organ": "Broca", "tagline": "Evaluate. Maintain. Improve.",
"ink_light": "#8b3e68", "ink_dark": "#f4a5ce", "glow": "#f4a5ce",
"hero": ("#351329", "#09030a"),
},
"brain": {
"function": "Orchestration",
"organ": "Brain",
"tagline": "Reason. Plan. Decide.",
"ink_light": "#2159c9", "ink_dark": "#6f9dff", "glow": "#4d8bff",
"glow2": "#a855f7",
"hero": ("#16234f", "#000312"),
},
"mind": {
"function": "Planning",
"organ": "Mind",
"tagline": "Intent. Priority. Flow.",
"ink_light": "#0a7d72", "ink_dark": "#2ee6cf", "glow": "#00d1ba",
"hero": ("#07302b", "#000000"),
},
"cortex": {
"function": "Science",
"organ": "Cortex",
"tagline": "Question. Run. Rule.",
"ink_light": "#a5177d", "ink_dark": "#ff7ad9", "glow": "#ff4fc3",
"hero": ("#340a2a", "#000000"),
},
"memory": {
"function": "Knowledge",
"organ": "Memory",
"tagline": "Remember. Learn. Evolve.",
"ink_light": "#6b34d6", "ink_dark": "#b37eff", "glow": "#b37eff",
Expand All @@ -104,24 +109,28 @@
# #fff and #f5c518 at 11.6:1 on #0d1117. The tagline is the one the
# organ's own dashboard already wears.
"eyes": {
"function": "Visualization",
"organ": "Eyes",
"tagline": "See. Compare. Improve.",
"ink_light": "#7d6300", "ink_dark": "#f5c518", "glow": "#ffc933",
"hero": ("#2e2503", "#000000"),
},
"ears": {
"function": "Community",
"organ": "Ears",
"tagline": "Listen. Understand. Follow through.",
"ink_light": "#96520b", "ink_dark": "#ffc078", "glow": "#ffc078",
"hero": ("#36200d", "#080503"),
},
"heart": {
"function": "Tests",
"organ": "Heart",
"tagline": "Check. Validate. Protect.",
"ink_light": "#b50f1a", "ink_dark": "#ff6b73", "glow": "#ff1c28",
"hero": ("#37080d", "#000000"),
},
"hands": {
"function": "Releases",
"organ": "Hands",
"tagline": "Build. Execute. Deliver.",
"ink_light": "#9a5400", "ink_dark": "#ffa733", "glow": "#ff9201",
Expand All @@ -133,6 +142,7 @@
# #34d399 at 9.8:1 on #0d1117. The tagline is the one the organ's own
# dashboard wears.
"pulse": {
"function": "Profiling",
"organ": "Pulse",
"tagline": "Measure. Trace. Compare.",
"ink_light": "#0b7a4b", "ink_dark": "#34d399", "glow": "#2ee88f",
Expand All @@ -145,18 +155,21 @@
# #6420e0 (7.4:1 on #fff) and #a27aff (6.1:1 on #0d1117). Bluer than the
# Memory violet, as the two logos are.
"insight": {
"function": "Inference",
"organ": "Insight",
"tagline": "Infer. Inspect. Understand.",
"ink_light": "#995500", "ink_dark": "#ffc163", "glow": "#ffb347",
"hero": ("#392600", "#000000"),
},
"dna": {
"function": "Environments",
"organ": "DNA",
"tagline": "Specify. Compare. Evolve.",
"ink_light": "#087b88", "ink_dark": "#67e8f9", "glow": "#22d3ee",
"hero": ("#08343c", "#00060a"),
},
"nerves": {
"function": "Configuration",
"organ": "Nerves",
"tagline": "Signal. Connect. Understand.",
"ink_light": "#6420e0", "ink_dark": "#a27aff", "glow": "#7523fe",
Expand All @@ -168,6 +181,7 @@
# is the same hue taken down to #3f7a00 (5.3:1 on #fff); the dark-scheme
# ink #8fe01a reads at 11.6:1 on #0d1117.
"gut": {
"function": "Cleanup",
"organ": "Gut",
"tagline": "Delete. Clean. Keep healthy.",
"ink_light": "#3f7a00", "ink_dark": "#8fe01a", "glow": "#8ad414",
Expand All @@ -177,6 +191,7 @@
# the tagline are designed to sit in the family rather than read off a
# file. Replace both from the logo if that repo ever grows one.
"organism": {
"function": "Overview",
"organ": "Scientist",
"tagline": "Describe. Build. Release.",
"ink_light": "#0b6fa4", "ink_dark": "#5ec7f5", "glow": "#38bdf8",
Expand Down Expand Up @@ -991,14 +1006,14 @@ def hero(key, kind, lede_html="", *, navigation=(), navigation_columns=None):
"""The masthead: the organ's logo re-drawn — mark, wordmark, rule, tagline.

`lede_html` is accepted for compatibility but not displayed.
`kind` is what this page *is* under the wordmark ("Dashboard", "Board"),
so the mark stays the organ's and the page keeps its own name.
`kind` remains accepted for compatibility with existing renderers.
The grey label describes the organ's function, from the shared metadata.
"""
o = organ(key)
# Legacy prose arguments remain accepted for downstream compatibility.
return (f'<header class="hero"><span class="orb">{mark(key)}</span>'
f'<h1>{WORD}<b>{o["organ"]}</b>'
f'<span class="kind">{kind}</span></h1>'
f'<span class="kind">{o["function"]}</span></h1>'
f'<div class="rule"></div>'
f'<p class="tag">{o["tagline"]}</p></header>'
f'{navigation_cards(navigation, columns=navigation_columns)}')
Expand Down
2 changes: 1 addition & 1 deletion config/policy.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -165,7 +165,6 @@ board:
brain: PyAutoBrain
mind: PyAutoMind
cortex: PyAutoCortex
broca: PyAutoBroca
memory: PyAutoMemory
eyes: PyAutoEyes
ears: PyAutoEars
Expand All @@ -175,5 +174,6 @@ board:
insight: PyAutoInsight
dna: PyAutoDNA
nerves: PyAutoNerves
broca: PyAutoBroca
gut: PyAutoGut
organism: PyAutoScientist
26 changes: 26 additions & 0 deletions docs/board-navigation.md
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,32 @@ keeps ownership of collection, health, freshness and action semantics.

## Component contract

The grey label beneath each software name describes the organ's function. It
comes from `board/_theme.py::ORGANS`, regardless of legacy renderer `kind`
arguments. Logos, wordmarks, taglines and banner styling are unchanged.

| Organ | Function |
|---|---|
| Brain | Orchestration |
| Mind | Planning |
| Cortex | Science |
| Memory | Knowledge |
| Eyes | Visualization |
| Ears | Community |
| Heart | Tests |
| Hands | Releases |
| Pulse | Profiling |
| Insight | Inference |
| DNA | Environments |
| Nerves | Configuration |
| Broca | Assistants |
| Gut | Cleanup |
| Scientist | Overview |

The shared navigation follows `config/policy.yaml` → `board.boards`, with Broca
immediately after Nerves. Consumers adopt these labels and this order when their
boards are regenerated with the updated Brain checkout.

`board/_theme.py::hero(key, kind, lede_html='', navigation=(), navigation_columns=None)` retains its
existing positional API. The optional keyword inserts
`navigation_cards(items, label='Board sections', columns=None)` directly after the masthead
Expand Down
11 changes: 6 additions & 5 deletions tests/test_board_theme.py
Original file line number Diff line number Diff line change
Expand Up @@ -211,7 +211,8 @@ def test_the_hero_reproduces_the_logo_wordmark():
page = _theme.hero("mind", "Dashboard", "lede text")
assert f'{_theme.WORD}<b>{_theme.ORGANS["mind"]["organ"]}</b>' in page
assert _theme.ORGANS["mind"]["tagline"] in page
assert "Dashboard" in page and "lede text" not in page
assert '<span class="kind">Planning</span>' in page
assert "Dashboard" not in page and "lede text" not in page


def test_pills_tone_the_exception_and_leave_the_default_neutral():
Expand Down Expand Up @@ -284,8 +285,8 @@ def test_board_links_reads_the_declared_family_in_file_order():
# ad-hoc order). This helper is the one read, so the order it returns is
# the order `config/policy.yaml` declares — the ruled organ order.
links = _theme.board_links("https://example.invalid")
assert list(links) == ["brain", "mind", "cortex", "broca", "memory", "eyes", "ears",
"heart", "hands", "pulse", "insight", "dna", "nerves", "gut", "organism"]
assert list(links) == ["brain", "mind", "cortex", "memory", "eyes", "ears",
"heart", "hands", "pulse", "insight", "dna", "nerves", "broca", "gut", "organism"]
assert list(links) == POLICY_BOARDS
assert links["cortex"] == "https://example.invalid/PyAutoCortex/"

Expand All @@ -307,8 +308,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", "broca", "memory", "eyes", "ears", "hands",
"pulse", "insight", "dna", "nerves", "gut", "organism"]
assert order == ["brain", "mind", "cortex", "memory", "eyes", "ears", "hands",
"pulse", "insight", "dna", "nerves", "broca", "gut", "organism"]


def test_board_links_returns_nothing_when_the_config_is_unreadable():
Expand Down
Loading