From 0d062f5d8138ff50fd4a8bf720cb67ed78372440 Mon Sep 17 00:00:00 2001 From: Tristan Simas Date: Thu, 30 Jul 2026 22:38:10 -0400 Subject: [PATCH] Use official OpenHCS logo family --- .github/workflows/website-pages.yml | 4 +- README.md | 4 +- openhcs/__init__.py | 2 +- openhcs/pyqt_gui/branding.py | 2 +- openhcs/resources/assets/README.md | 13 +++- openhcs/resources/assets/openhcs-favicon.svg | 5 ++ .../resources/assets/openhcs-icon-square.png | Bin 0 -> 27771 bytes .../resources/assets/openhcs-icon-square.svg | 8 ++ .../assets/openhcs-lockup-horizontal.svg | 8 ++ .../assets/openhcs-lockup-stacked.svg | 8 ++ .../resources/assets/openhcs-mark-mono.svg | 5 ++ openhcs/resources/assets/openhcs-mark.png | Bin 5452 -> 0 bytes openhcs/resources/assets/openhcs-mark.svg | 11 +-- openhcs/resources/assets/openhcs.icns | Bin 16318 -> 79976 bytes openhcs/resources/assets/openhcs.ico | Bin 6594 -> 19697 bytes openhcs/resources/brand.py | 16 +++- packaging/chatgpt/openhcs/assets/openhcs.svg | 21 ----- .../codex/openhcs/.codex-plugin/plugin.json | 2 +- packaging/codex/openhcs/.mcp.json | 2 +- packaging/mcpb/openhcs/manifest.json | 2 +- packaging/mcpb/openhcs/pyproject.toml | 4 +- scripts/build_hosted_mcp_plugin.py | 5 +- scripts/build_website.py | 10 ++- scripts/render_brand_assets.sh | 4 +- server.json | 6 +- tests/unit/test_brand_assets.py | 72 ++++++++++++++---- tests/unit/test_build_hosted_mcp_plugin.py | 12 ++- tests/unit/test_build_website.py | 34 +++++---- website/index.html | 9 +-- website/privacy.html | 9 +-- website/styles.css | 25 ++++-- website/support.html | 9 +-- website/terms.html | 9 +-- 33 files changed, 208 insertions(+), 113 deletions(-) create mode 100644 openhcs/resources/assets/openhcs-favicon.svg create mode 100644 openhcs/resources/assets/openhcs-icon-square.png create mode 100644 openhcs/resources/assets/openhcs-icon-square.svg create mode 100644 openhcs/resources/assets/openhcs-lockup-horizontal.svg create mode 100644 openhcs/resources/assets/openhcs-lockup-stacked.svg create mode 100644 openhcs/resources/assets/openhcs-mark-mono.svg delete mode 100644 openhcs/resources/assets/openhcs-mark.png delete mode 100644 packaging/chatgpt/openhcs/assets/openhcs.svg diff --git a/.github/workflows/website-pages.yml b/.github/workflows/website-pages.yml index 1dc8b1028..170f5f90d 100644 --- a/.github/workflows/website-pages.yml +++ b/.github/workflows/website-pages.yml @@ -4,7 +4,7 @@ on: pull_request: paths: - "website/**" - - "openhcs/resources/assets/openhcs-mark.svg" + - "openhcs/resources/assets/openhcs-*.svg" - "docs/source/_static/ui.png" - "scripts/build_website.py" - "tests/unit/test_build_website.py" @@ -14,7 +14,7 @@ on: branches: [main] paths: - "website/**" - - "openhcs/resources/assets/openhcs-mark.svg" + - "openhcs/resources/assets/openhcs-*.svg" - "docs/source/_static/ui.png" - "scripts/build_website.py" - "tests/unit/test_build_website.py" diff --git a/README.md b/README.md index 8d0d72795..c0765a00e 100644 --- a/README.md +++ b/README.md @@ -2,9 +2,7 @@
-OpenHCS logo - -

OpenHCS

+

OpenHCS

**Bioimage analysis platform for high-content screening**\ **Compile-time validation · Bidirectional GUI↔Code · Multi-GPU · LLM pipeline generation · Extensible function registry** diff --git a/openhcs/__init__.py b/openhcs/__init__.py index 82ec8aeb3..570746f45 100644 --- a/openhcs/__init__.py +++ b/openhcs/__init__.py @@ -14,7 +14,7 @@ from openhcs._source_dependencies import ensure_source_checkout_external_paths -__version__ = "0.7.2" +__version__ = "0.7.3" # Configure polystore defaults for OpenHCS integration os.environ.setdefault("POLYSTORE_METADATA_FILENAME", "openhcs_metadata.json") diff --git a/openhcs/pyqt_gui/branding.py b/openhcs/pyqt_gui/branding.py index 2dfd0316a..33530d048 100644 --- a/openhcs/pyqt_gui/branding.py +++ b/openhcs/pyqt_gui/branding.py @@ -11,6 +11,6 @@ def openhcs_application_icon() -> QIcon: """Build the OpenHCS application icon from its packaged raster asset.""" pixmap = QPixmap() - if not pixmap.loadFromData(brand_asset_bytes(BrandAsset.RASTER)): + if not pixmap.loadFromData(brand_asset_bytes(BrandAsset.ICON_RASTER)): raise RuntimeError("Packaged OpenHCS application icon could not be decoded.") return QIcon(pixmap) diff --git a/openhcs/resources/assets/README.md b/openhcs/resources/assets/README.md index 883ffd492..0347d536e 100644 --- a/openhcs/resources/assets/README.md +++ b/openhcs/resources/assets/README.md @@ -1,10 +1,15 @@ # OpenHCS brand assets -`openhcs-mark.svg` is the canonical OpenHCS project mark. It preserves the -geometry and colors of the OpenHCSDev organization avatar. +The official source family contains: -`openhcs-mark.png`, `openhcs.ico`, and `openhcs.icns` are mechanically rendered -platform encodings of that SVG. Regenerate them with: +- `openhcs-mark.svg` and `openhcs-mark-mono.svg` for symbol-only use. +- `openhcs-lockup-horizontal.svg` for wide headers. +- `openhcs-lockup-stacked.svg` for compact full-logo placement. +- `openhcs-icon-square.svg` for application and plugin icons. +- `openhcs-favicon.svg` for browser chrome. + +`openhcs-icon-square.png`, `openhcs.ico`, and `openhcs.icns` are mechanically +rendered platform encodings of `openhcs-icon-square.svg`. Regenerate them with: ```bash scripts/render_brand_assets.sh diff --git a/openhcs/resources/assets/openhcs-favicon.svg b/openhcs/resources/assets/openhcs-favicon.svg new file mode 100644 index 000000000..72c0b569f --- /dev/null +++ b/openhcs/resources/assets/openhcs-favicon.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/openhcs/resources/assets/openhcs-icon-square.png b/openhcs/resources/assets/openhcs-icon-square.png new file mode 100644 index 0000000000000000000000000000000000000000..8eb703da36cdd9abc5eed9bda790020f13883f08 GIT binary patch literal 27771 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 literal 0 HcmV?d00001 diff --git a/openhcs/resources/assets/openhcs-icon-square.svg b/openhcs/resources/assets/openhcs-icon-square.svg new file mode 100644 index 000000000..0570aa203 --- /dev/null +++ b/openhcs/resources/assets/openhcs-icon-square.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/openhcs/resources/assets/openhcs-lockup-horizontal.svg b/openhcs/resources/assets/openhcs-lockup-horizontal.svg new file mode 100644 index 000000000..d000bef92 --- /dev/null +++ b/openhcs/resources/assets/openhcs-lockup-horizontal.svg @@ -0,0 +1,8 @@ + + + + + + + OpenHCS + diff --git a/openhcs/resources/assets/openhcs-lockup-stacked.svg b/openhcs/resources/assets/openhcs-lockup-stacked.svg new file mode 100644 index 000000000..64c3d6b8e --- /dev/null +++ b/openhcs/resources/assets/openhcs-lockup-stacked.svg @@ -0,0 +1,8 @@ + + OpenHCS + + + + + + diff --git a/openhcs/resources/assets/openhcs-mark-mono.svg b/openhcs/resources/assets/openhcs-mark-mono.svg new file mode 100644 index 000000000..82f0c45b2 --- /dev/null +++ b/openhcs/resources/assets/openhcs-mark-mono.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/openhcs/resources/assets/openhcs-mark.png b/openhcs/resources/assets/openhcs-mark.png deleted file mode 100644 index 18d3f26188e1a66178a87df196d5be5904a6e749..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5452 zcmeAS@N?(olHy`uVBq!ia0y~yU;#2&7&w@K)Q9>#SAY~-lDE4H!+#K5uy^@n1_n_^ zPZ!6KiaBp@Irg>&2)G_R&%)l}#JMV^#-;tE-qk_kEr< zkKw@bJq#bX_cQDOW;aNeV8Snb2ZzXSKe!!casvfN`wpW8(P%%By1nDyUl?Y52X*xr z8v4N*4^jap*ZgMJ09SuJ1;B!Tv~xZ>Br)3gr|me^?WpW3X5f&U;Ao$3@He+V@w2dL Wb^QEqFa=m8GkCiCxvX - OpenHCS - - + + + + diff --git a/openhcs/resources/assets/openhcs.icns b/openhcs/resources/assets/openhcs.icns index b9cf481c3f9ecd5f658bd8fd1231b31ce40b0d6e..381a4be7672373b32956e11bff232c8c6fa7b5fe 100644 GIT binary patch literal 79976 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 diff --git a/openhcs/resources/assets/openhcs.ico b/openhcs/resources/assets/openhcs.ico index 9810f1557dd6169b6dd97f5bbb53f6b9ef2b486b..a55e2c1b6b17190acc852a8b82de9e2fe42f162c 100644 GIT binary patch literal 19697 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 F{14QnjiUen literal 6594 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 Znf~Ro - OpenHCS - A microscopy plate with connected image-analysis wells. - - - - - - - - - - - - - - - - - - diff --git a/packaging/codex/openhcs/.codex-plugin/plugin.json b/packaging/codex/openhcs/.codex-plugin/plugin.json index a4a7610d6..19126a87f 100644 --- a/packaging/codex/openhcs/.codex-plugin/plugin.json +++ b/packaging/codex/openhcs/.codex-plugin/plugin.json @@ -1,6 +1,6 @@ { "name": "openhcs", - "version": "0.7.2", + "version": "0.7.3", "description": "Inspect, author, validate, and run OpenHCS microscopy workflows through the local OpenHCS MCP server.", "author": { "name": "OpenHCSDev", diff --git a/packaging/codex/openhcs/.mcp.json b/packaging/codex/openhcs/.mcp.json index 315856685..d6770bea5 100644 --- a/packaging/codex/openhcs/.mcp.json +++ b/packaging/codex/openhcs/.mcp.json @@ -4,7 +4,7 @@ "command": "uvx", "args": [ "--from", - "openhcs[gui,mcp,viz]==0.7.2", + "openhcs[gui,mcp,viz]==0.7.3", "openhcs-mcp" ] } diff --git a/packaging/mcpb/openhcs/manifest.json b/packaging/mcpb/openhcs/manifest.json index 08cbdfba8..ac62b01a3 100644 --- a/packaging/mcpb/openhcs/manifest.json +++ b/packaging/mcpb/openhcs/manifest.json @@ -2,7 +2,7 @@ "manifest_version": "0.4", "name": "openhcs", "display_name": "OpenHCS", - "version": "0.7.2", + "version": "0.7.3", "description": "Operate local OpenHCS microscopy workflows through MCP.", "long_description": "Installs a pinned OpenHCS environment with the MCP server, PyQt user interface, and Napari/Fiji viewer runtimes. The MCP process runs over stdio and attaches to an authenticated, separately running OpenHCS UI when GUI tools are requested.", "author": { diff --git a/packaging/mcpb/openhcs/pyproject.toml b/packaging/mcpb/openhcs/pyproject.toml index 3456576a5..822b00809 100644 --- a/packaging/mcpb/openhcs/pyproject.toml +++ b/packaging/mcpb/openhcs/pyproject.toml @@ -1,8 +1,8 @@ [project] name = "openhcs-mcpb-runtime" -version = "0.7.2" +version = "0.7.3" description = "Managed runtime for the OpenHCS MCP Bundle" requires-python = ">=3.11,<3.14" dependencies = [ - "openhcs[gui,mcp,viz]==0.7.2", + "openhcs[gui,mcp,viz]==0.7.3", ] diff --git a/scripts/build_hosted_mcp_plugin.py b/scripts/build_hosted_mcp_plugin.py index a8e9c5a4d..9f054ced8 100644 --- a/scripts/build_hosted_mcp_plugin.py +++ b/scripts/build_hosted_mcp_plugin.py @@ -15,13 +15,14 @@ from openhcs.mcp.http import hosted_capability_registry from openhcs.mcp.http_auth import McpHttpAuthenticationMode +from openhcs.resources.brand import BRAND_PRIMARY_COLOR REPO_ROOT = Path(__file__).resolve().parents[1] LOCAL_PLUGIN_ROOT = REPO_ROOT / "packaging" / "codex" / "openhcs" LOCAL_PLUGIN_MANIFEST = LOCAL_PLUGIN_ROOT / ".codex-plugin" / "plugin.json" CHATGPT_PLUGIN_ASSET = ( - REPO_ROOT / "packaging" / "chatgpt" / "openhcs" / "assets" / "openhcs.svg" + REPO_ROOT / "openhcs" / "resources" / "assets" / "openhcs-icon-square.svg" ) APP_MANIFEST_PATH = "./.app.json" @@ -328,7 +329,7 @@ def _plugin_manifest( "privacyPolicyURL": privacy_policy_url, "termsOfServiceURL": terms_of_service_url, "defaultPrompt": list(STARTER_PROMPTS), - "brandColor": "#00A86B", + "brandColor": BRAND_PRIMARY_COLOR, "composerIcon": validate_plugin_relative_path( BRAND_ASSET_PATH, label="Plugin composer-icon path", diff --git a/scripts/build_website.py b/scripts/build_website.py index 3e644527d..c8fb64061 100644 --- a/scripts/build_website.py +++ b/scripts/build_website.py @@ -32,7 +32,15 @@ "assets/logos/tensorflow.svg", ) ASSET_SOURCES = { - "assets/logos/openhcs.svg": "openhcs/resources/assets/openhcs-mark.svg", + "assets/logos/openhcs-favicon.svg": ( + "openhcs/resources/assets/openhcs-favicon.svg" + ), + "assets/logos/openhcs-horizontal.svg": ( + "openhcs/resources/assets/openhcs-lockup-horizontal.svg" + ), + "assets/logos/openhcs-stacked.svg": ( + "openhcs/resources/assets/openhcs-lockup-stacked.svg" + ), "assets/ui.png": "docs/source/_static/ui.png", } REQUIRED_COPY = ( diff --git a/scripts/render_brand_assets.sh b/scripts/render_brand_assets.sh index 011b98cf2..5a2c1c867 100755 --- a/scripts/render_brand_assets.sh +++ b/scripts/render_brand_assets.sh @@ -4,8 +4,8 @@ set -euo pipefail repository_root=$(cd "$(dirname "$0")/.." && pwd) asset_directory="$repository_root/openhcs/resources/assets" -source_svg="$asset_directory/openhcs-mark.svg" -raster_png="$asset_directory/openhcs-mark.png" +source_svg="$asset_directory/openhcs-icon-square.svg" +raster_png="$asset_directory/openhcs-icon-square.png" windows_icon="$asset_directory/openhcs.ico" macos_icon="$asset_directory/openhcs.icns" diff --git a/server.json b/server.json index 1a224c983..101b0a28f 100644 --- a/server.json +++ b/server.json @@ -8,19 +8,19 @@ "url": "https://github.com/OpenHCSDev/OpenHCS", "source": "github" }, - "version": "0.7.2", + "version": "0.7.3", "packages": [ { "registryType": "pypi", "registryBaseUrl": "https://pypi.org", "identifier": "openhcs", - "version": "0.7.2", + "version": "0.7.3", "runtimeHint": "uvx", "runtimeArguments": [ { "type": "named", "name": "--with", - "value": "openhcs[gui,mcp,viz]==0.7.2", + "value": "openhcs[gui,mcp,viz]==0.7.3", "description": "Install the matching OpenHCS GUI, MCP, Napari, and Fiji dependencies." } ], diff --git a/tests/unit/test_brand_assets.py b/tests/unit/test_brand_assets.py index 48fac35de..030f7a740 100644 --- a/tests/unit/test_brand_assets.py +++ b/tests/unit/test_brand_assets.py @@ -1,19 +1,30 @@ from __future__ import annotations +import re import struct from xml.etree import ElementTree from openhcs.resources.brand import ( + BRAND_PRIMARY_COLOR, BrandAsset, brand_asset_bytes, brand_asset_path, ) +def test_primary_brand_color_matches_official_mark(): + assert BRAND_PRIMARY_COLOR == "#1D9E75" + + def test_brand_assets_are_one_complete_packaged_family() -> None: assert {asset.name for asset in BrandAsset} == { - "SCALABLE", - "RASTER", + "MARK", + "MARK_MONO", + "LOCKUP_HORIZONTAL", + "LOCKUP_STACKED", + "ICON_SQUARE", + "FAVICON", + "ICON_RASTER", "WINDOWS_ICON", "MACOS_ICON", } @@ -23,26 +34,57 @@ def test_brand_assets_are_one_complete_packaged_family() -> None: assert path.read_bytes() == brand_asset_bytes(asset) -def test_canonical_brand_svg_preserves_official_geometry_and_colors() -> None: - root = ElementTree.fromstring(brand_asset_bytes(BrandAsset.SCALABLE)) +def test_official_logo_family_preserves_declared_geometry_and_colors() -> None: + root = ElementTree.fromstring(brand_asset_bytes(BrandAsset.MARK)) namespace = {"svg": "http://www.w3.org/2000/svg"} - assert root.attrib["viewBox"] == "0 0 420 420" - background = root.find("svg:rect", namespace) - mark = root.find("svg:path", namespace) + assert root.attrib["viewBox"] == "0 0 90 32" + elements = list(root) + assert len(elements) == 3 + assert elements[0].attrib["stroke"] == "#1D9E75" + assert elements[1].attrib["stroke"] == "#5DCAA5" + assert elements[2].attrib["fill"] == "#1D9E75" + + square = ElementTree.fromstring(brand_asset_bytes(BrandAsset.ICON_SQUARE)) + assert square.attrib["viewBox"] == "0 0 512 512" + background = square.find("svg:rect", namespace) assert background is not None + assert background.attrib["fill"] == "#0A0D16" + + for asset in ( + BrandAsset.MARK, + BrandAsset.LOCKUP_HORIZONTAL, + BrandAsset.LOCKUP_STACKED, + BrandAsset.ICON_SQUARE, + BrandAsset.FAVICON, + ): + assert b"#dda98b" not in brand_asset_bytes(asset).lower() + + +def test_stacked_wordmark_and_symbol_share_flush_width() -> None: + root = ElementTree.fromstring(brand_asset_bytes(BrandAsset.LOCKUP_STACKED)) + namespace = {"svg": "http://www.w3.org/2000/svg"} + text = root.find("svg:text", namespace) + mark = root.find("svg:g", namespace) + + assert text is not None assert mark is not None - assert background.attrib == { - "width": "420", - "height": "420", - "fill": "#f0f0f0", - } - assert mark.attrib["fill"] == "#dda98b" - assert mark.attrib["d"].startswith("M35 35h141") + assert text.attrib["x"] == "7" + assert text.attrib["textLength"] == "140" + assert text.attrib["lengthAdjust"] == "spacingAndGlyphs" + + match = re.fullmatch( + r"translate\((?P[0-9.]+) (?P[0-9.]+)\) " + r"scale\((?P[0-9.]+)\)", + mark.attrib["transform"], + ) + assert match is not None + assert float(match.group("x")) == float(text.attrib["x"]) + assert abs(90 * float(match.group("scale")) - 140) < 0.01 def test_platform_brand_encodings_have_native_container_headers() -> None: - png = brand_asset_bytes(BrandAsset.RASTER) + png = brand_asset_bytes(BrandAsset.ICON_RASTER) assert png[:8] == b"\x89PNG\r\n\x1a\n" assert struct.unpack(">II", png[16:24]) == (1024, 1024) diff --git a/tests/unit/test_build_hosted_mcp_plugin.py b/tests/unit/test_build_hosted_mcp_plugin.py index 07aec89f1..8617de34e 100644 --- a/tests/unit/test_build_hosted_mcp_plugin.py +++ b/tests/unit/test_build_hosted_mcp_plugin.py @@ -68,6 +68,16 @@ def _source_asset(tmp_path): return source +def test_default_hosted_plugin_asset_uses_package_brand_authority(): + assert plugin_builder.CHATGPT_PLUGIN_ASSET == ( + plugin_builder.REPO_ROOT + / "openhcs" + / "resources" + / "assets" + / "openhcs-icon-square.svg" + ) + + def _build(tmp_path, *, output_name="plugin", **overrides): arguments = { **PUBLIC_URLS, @@ -114,7 +124,7 @@ def test_hosted_plugin_is_registered_read_only_projection(tmp_path): "Find OpenHCS functions for normalizing an image stack.", "Show me how to configure an OpenHCS pipeline for my microscopy assay.", ], - "brandColor": "#00A86B", + "brandColor": "#1D9E75", "composerIcon": "./assets/openhcs.svg", "logo": "./assets/openhcs.svg", } diff --git a/tests/unit/test_build_website.py b/tests/unit/test_build_website.py index 6e03b8c75..4ef3660a4 100644 --- a/tests/unit/test_build_website.py +++ b/tests/unit/test_build_website.py @@ -6,6 +6,7 @@ import pytest from scripts.build_website import ( + ASSET_SOURCES, CONTACT_EMAIL_TOKEN, RELEASE_VERSION_TOKEN, build_site, @@ -29,7 +30,6 @@ def test_build_site_stages_authoritative_screenshot_and_valid_references( REPO_ROOT / "docs/source/_static/ui.png" ).read_bytes() for logo_name in ( - "openhcs.svg", "bioformats.svg", "cellprofiler.png", "cupy.svg", @@ -40,15 +40,14 @@ def test_build_site_stages_authoritative_screenshot_and_valid_references( "pytorch.svg", "tensorflow.svg", ): - if logo_name == "openhcs.svg": - authority = ( - REPO_ROOT / "openhcs/resources/assets/openhcs-mark.svg" - ) - else: - authority = REPO_ROOT / "website/assets/logos" / logo_name + authority = REPO_ROOT / "website/assets/logos" / logo_name assert (site_dir / "assets/logos" / logo_name).read_bytes() == ( authority.read_bytes() ) + for output_name, source_name in ASSET_SOURCES.items(): + assert (site_dir / output_name).read_bytes() == ( + REPO_ROOT / source_name + ).read_bytes() assert local_targets == ( "assets/logos/bioformats.svg", "assets/logos/cellprofiler.png", @@ -56,7 +55,9 @@ def test_build_site_stages_authoritative_screenshot_and_valid_references( "assets/logos/fiji.svg", "assets/logos/jax.png", "assets/logos/napari.svg", - "assets/logos/openhcs.svg", + "assets/logos/openhcs-favicon.svg", + "assets/logos/openhcs-horizontal.svg", + "assets/logos/openhcs-stacked.svg", "assets/logos/pyclesperanto.png", "assets/logos/pytorch.svg", "assets/logos/tensorflow.svg", @@ -185,8 +186,10 @@ def test_landing_page_uses_factual_copy_and_readable_proportions(): styles = (REPO_ROOT / "website/styles.css").read_text(encoding="utf-8") assert "OpenHCS defines and runs microscopy workflows." in html - assert html.count('src="assets/logos/openhcs.svg"') == 2 - assert 'href="assets/logos/openhcs.svg"' in html + assert html.count('src="assets/logos/openhcs-horizontal.svg"') == 1 + assert html.count('src="assets/logos/openhcs-stacked.svg"') == 1 + assert 'href="assets/logos/openhcs-favicon.svg"' in html + assert 'OpenHCS' not in html assert '' not in html assert 'class="hero-grid"' in html assert 'class="release-summary"' in html @@ -238,8 +241,9 @@ def test_public_policy_pages_are_staged_with_truthful_hosted_boundaries( assert 'href="privacy.html"' in document assert 'href="support.html"' in document assert 'href="terms.html"' in document - assert document.count('src="assets/logos/openhcs.svg"') == 2 - assert 'href="assets/logos/openhcs.svg"' in document + assert document.count('src="assets/logos/openhcs-horizontal.svg"') == 1 + assert document.count('src="assets/logos/openhcs-stacked.svg"') == 1 + assert 'href="assets/logos/openhcs-favicon.svg"' in document assert "does not currently operate a public hosted MCP endpoint" in privacy_copy assert "does not record bearer tokens or tool arguments" in privacy_copy @@ -286,7 +290,7 @@ def test_website_source_and_workflow_follow_package_metadata_authorities(): assert workflow.count(' - "openhcs/__init__.py"') == 2 assert ( workflow.count( - ' - "openhcs/resources/assets/openhcs-mark.svg"' + ' - "openhcs/resources/assets/openhcs-*.svg"' ) == 2 ) @@ -317,7 +321,9 @@ def test_readme_does_not_link_unpublished_coverage_site(): readme = (REPO_ROOT / "README.md").read_text(encoding="utf-8") assert "trissim.github.io/openhcs/coverage" not in readme - assert 'src="openhcs/resources/assets/openhcs-mark.svg"' in readme + assert ( + 'src="openhcs/resources/assets/openhcs-lockup-stacked.svg"' in readme + ) def test_build_site_refuses_to_replace_source_or_repository_root(): diff --git a/website/index.html b/website/index.html index 66f24c0c4..15231f85d 100644 --- a/website/index.html +++ b/website/index.html @@ -20,7 +20,7 @@ > OpenHCS | Open-source high-content image analysis - + @@ -32,8 +32,7 @@