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
6 changes: 4 additions & 2 deletions board/_theme.py
Original file line number Diff line number Diff line change
Expand Up @@ -1002,17 +1002,19 @@ def orchestration_panel(key, title, description, prompt, *, work_links=(),
)


def hero(key, kind, lede_html="", *, navigation=(), navigation_columns=None):
def hero(key, kind, lede_html="", *, navigation=(), navigation_columns=None, display_name=None):
"""The masthead: the organ's logo re-drawn — mark, wordmark, rule, tagline.

`lede_html` is accepted for compatibility but not displayed.
`kind` remains accepted for compatibility with existing renderers.
The grey label describes the organ's function, from the shared metadata.
`display_name` optionally replaces the wordmark with escaped instance text.
"""
o = organ(key)
wordmark = f'{WORD}<b>{o["organ"]}</b>' if display_name is None else f'<b>{_esc(display_name)}</b>'
# 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'<h1>{wordmark}'
f'<span class="kind">{o["function"]}</span></h1>'
f'<div class="rule"></div>'
f'<p class="tag">{o["tagline"]}</p></header>'
Expand Down
2 changes: 2 additions & 0 deletions docs/adoption/config_surfaces.md
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,8 @@ framework organs is domain-free logic you pull from upstream.
| Surface | Organ | What it declares |
|---------|-------|------------------|
| `repos.yaml` | Mind (yours) | The body map — every repo's GitHub home, category, role. The single source the rest are checked against. |
| Profile passed with `--instance` | Scientist | Opt-in instance name, canonical repository ID, Pages URL, project-config path and explicitly connected organs; see the [starter preview](https://github.com/PyAutoLabs/PyAutoScientist/blob/main/STARTER.md). |
| Project configuration referenced by the profile | Scientist | Explicit project/resource relationships and public visibility; repository identity still comes from Mind. |
| `config/repos.yaml` | Heart | What to poll and gate: repo groups, required CI workflows, thresholds, dirty-file noise patterns. |
| `pre_build.sh` — the `run_workspace` table | Hands | One row per workspace: repo, package, flags, parent library. |
| `agents/faculties/sizing/_sizing.py` | Brain | The library/workspace repo sets and aliases used to size and route tasks. |
Expand Down
9 changes: 9 additions & 0 deletions docs/adoption/guide.md
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,15 @@ improvements cleanly forever after. There is deliberately no shared
deployment, no "generic edition", and no stability promise on `main` — see
{ref}`the disclaimer <stability>` below.

## Independent starter preview

The Scientist adoption pilot now offers an opt-in, independently named empty
[local dashboard preview](https://github.com/PyAutoLabs/PyAutoScientist/blob/main/STARTER.md).
It separates instance identity and selected organ connections from the renderer,
and does not require the full organ family. It does not yet bootstrap a working
Mind or harness, activate organs or deploy an independent site. The existing
full-stack walkthrough below remains separate from this smaller pilot path.

## Prerequisites — what PyAutoScientist *is*

These are the product, not incidental choices. If they don't fit how you
Expand Down
5 changes: 4 additions & 1 deletion docs/board-navigation.md
Original file line number Diff line number Diff line change
Expand Up @@ -40,7 +40,10 @@ existing positional API. The optional keyword inserts
`navigation_cards(items, label='Board sections', columns=None)` directly after the masthead
and before the description. `section_layout(page, summaries=None)` composes the
finished owner HTML into the standard order, moving the orchestration panel above
these cards. Existing `hero` callers retain their positional API.
these cards. Existing `hero` callers retain their positional API. Its optional keyword-only
`display_name` replaces the wordmark with escaped instance-owned text, leaving
the organ mark, function and palette unchanged. Omitting it preserves the
existing wordmark. Scientist uses it for independently named instance profiles.

Each item is a mapping with `href` and `label`, plus optional `count` and
`context`. Text is escaped. Destinations accept local anchors, relative links
Expand Down
9 changes: 9 additions & 0 deletions tests/test_board_theme.py
Original file line number Diff line number Diff line change
Expand Up @@ -546,3 +546,12 @@ def test_navigation_desktop_columns_are_opt_in_and_propagated_by_hero():
def test_navigation_columns_reject_invalid_values(columns):
with pytest.raises(ValueError):
_theme.navigation_cards([], columns=columns)


def test_hero_instance_name_is_escaped_without_mutating_shared_branding():
original = _theme.hero('organism', 'Dashboard')
named = _theme.hero('organism', 'Dashboard', display_name='Mira & <Research>')
assert '<b>Mira &amp; &lt;Research&gt;</b>' in named
assert _theme.MARKS['organism'] in named
assert _theme.ORGANS['organism']['function'] in named
assert _theme.hero('organism', 'Dashboard') == original
Loading