Skip to content

Commit 723e8be

Browse files
committed
Keep the theme behind the tenant firewall
The board palette named PyAutoScientist and a test fixture named PyAutoFit. Both are instance facts — repos.yaml classes them `project` and `library`, not `organ` — so both leaked into organ code, and CI's tenant-firewall check was right to reject them. `ORGANS` carried a `repo` field no renderer ever read; it is gone rather than allowlisted. The board KEY is the identity the theme needs, and `config/policy.yaml` `board: boards:` is the declared surface that maps a key to a repo — the one place an adopting fork rewrites. Nothing in the look layer needs to know a repo name. The test fixture only needed a long sentence containing a backtick, so it no longer borrows a real repo's name to get one. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Fjjkrhp7xbEqf6Nh1EhodV
1 parent 6106ffe commit 723e8be

3 files changed

Lines changed: 18 additions & 16 deletions

File tree

board/_theme.py

Lines changed: 15 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -27,12 +27,14 @@
2727
* **ok / warn / bad** stay reserved for the verdict semantics they already
2828
carry on the Heart-style boards.
2929
30-
`ORGANS` is the palette table. Five of the six are sampled from the actual
31-
logo files — the glyph colour and the wordmark's own tagline, straight off
32-
`logo.png` in each organ's repo. The umbrella (PyAutoScientist) has no logo,
33-
so its accent and tagline are designed to sit in the family instead. Every
34-
accent is checked for >= 4.5:1 contrast against its own background (light on
35-
`#fff`, dark on `#0d1117`).
30+
`ORGANS` is the palette table, keyed by the same board names as
31+
`config/policy.yaml` `board: boards:` — that mapping is the declared config
32+
surface an adopting fork replaces, so no repo is named here. Five of the six
33+
palettes are sampled from the actual logo files: the glyph colour and the
34+
wordmark's own tagline, straight off `logo.png` in each organ's repo. The
35+
umbrella board has no logo, so its accent and tagline are designed to sit in
36+
the family instead. Every accent is checked for >= 4.5:1 contrast against
37+
its own background (light on `#fff`, dark on `#0d1117`).
3638
"""
3739

3840
# ---------------------------------------------------------------- palette ---
@@ -43,40 +45,40 @@
4345
# vignette: a tinted lift behind the wordmark falling to near-black.
4446
ORGANS = {
4547
"mind": {
46-
"repo": "PyAutoMind", "organ": "Mind",
48+
"organ": "Mind",
4749
"glyph": "\U0001f4cb", "tagline": "Intent. Priority. Flow.",
4850
"ink_light": "#0a7d72", "ink_dark": "#2ee6cf", "glow": "#00d1ba",
4951
"hero": ("#0a3f39", "#000000"),
5052
},
5153
"brain": {
52-
"repo": "PyAutoBrain", "organ": "Brain",
54+
"organ": "Brain",
5355
"glyph": "\U0001f9e0", "tagline": "Reason. Plan. Decide.",
5456
"ink_light": "#2159c9", "ink_dark": "#6f9dff", "glow": "#4d8bff",
5557
"hero": ("#1b2a6b", "#000312"),
5658
},
5759
"heart": {
58-
"repo": "PyAutoHeart", "organ": "Heart",
60+
"organ": "Heart",
5961
"glyph": "❤️", "tagline": "Check. Validate. Protect.",
6062
"ink_light": "#b50f1a", "ink_dark": "#ff6b73", "glow": "#ff1c28",
6163
"hero": ("#4a0a10", "#000000"),
6264
},
6365
"hands": {
64-
"repo": "PyAutoHands", "organ": "Hands",
66+
"organ": "Hands",
6567
"glyph": "\U0001f6e0️", "tagline": "Build. Execute. Deliver.",
6668
"ink_light": "#9a5400", "ink_dark": "#ffa733", "glow": "#ff9201",
6769
"hero": ("#4a2c00", "#000000"),
6870
},
6971
"memory": {
70-
"repo": "PyAutoMemory", "organ": "Memory",
72+
"organ": "Memory",
7173
"glyph": "\U0001f4da", "tagline": "Remember. Learn. Evolve.",
7274
"ink_light": "#6b34d6", "ink_dark": "#b37eff", "glow": "#b37eff",
7375
"hero": ("#2e1a5c", "#000000"),
7476
},
7577
# The umbrella is the one board with no logo to sample: the accent and
7678
# the tagline are designed to sit in the family rather than read off a
77-
# file. Replace both from the logo if PyAutoScientist ever grows one.
79+
# file. Replace both from the logo if that repo ever grows one.
7880
"organism": {
79-
"repo": "PyAutoScientist", "organ": "Scientist",
81+
"organ": "Scientist",
8082
"glyph": "\U0001f9ec", "tagline": "Describe. Build. Release.",
8183
"ink_light": "#0b6fa4", "ink_dark": "#5ec7f5", "glow": "#38bdf8",
8284
"hero": ("#0c3f5c", "#00070d"),

tests/test_board_theme.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ def test_every_declared_board_has_a_complete_palette_entry():
3030
for key in POLICY_BOARDS:
3131
assert key in _theme.ORGANS, key
3232
o = _theme.ORGANS[key]
33-
for field in ("repo", "organ", "glyph", "tagline",
33+
for field in ("organ", "glyph", "tagline",
3434
"ink_light", "ink_dark", "glow", "hero"):
3535
assert o.get(field), f"{key}.{field}"
3636
assert len(o["hero"]) == 2

tests/test_intake_dashboard.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -322,9 +322,9 @@ def test_a_long_title_is_cut_where_a_reader_can_stop(tmp_path):
322322
) == "Rectangular mesh split Bilinear fast CPU default versus RTU…"
323323
# An unpaired backtick would let the code span bleed into the page.
324324
assert _intake._title(
325-
"Give PyAutoFit searches a proper `seed today because no search can "
325+
"Give every fitted search a proper `seed today because no search can "
326326
"set it now"
327-
) == "Give PyAutoFit searches a proper…"
327+
) == "Give every fitted search a proper…"
328328

329329

330330
def test_a_short_title_is_left_exactly_alone(tmp_path):

0 commit comments

Comments
 (0)