From 9b8525f79efa6cd35910d27f99cd69c0ca93b08d Mon Sep 17 00:00:00 2001 From: Adrian Webb Date: Thu, 10 Sep 2026 11:33:28 -0400 Subject: [PATCH] fix(brand): restore canonical TreeSeed favicon --- package-lock.json | 4 ++-- package.json | 2 +- scripts/brand/sync-assets.ts | 2 ++ tests/unit/brand-assets.test.ts | 15 +++++++++++++++ 4 files changed, 20 insertions(+), 3 deletions(-) create mode 100644 tests/unit/brand-assets.test.ts diff --git a/package-lock.json b/package-lock.json index 747cc3c6..b6beeefe 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "@treeseed/admin", - "version": "0.12.59-rc.37", + "version": "0.12.59-rc.38", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "@treeseed/admin", - "version": "0.12.59-rc.37", + "version": "0.12.59-rc.38", "license": "Apache-2.0", "dependencies": { "@astrojs/starlight": "0.37.6", diff --git a/package.json b/package.json index 1d5bd5ed..ff88ab87 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@treeseed/admin", - "version": "0.12.59-rc.37", + "version": "0.12.59-rc.38", "description": "Treeseed administration portal framework built on @treeseed/core and @treeseed/ui.", "license": "Apache-2.0", "repository": { diff --git a/scripts/brand/sync-assets.ts b/scripts/brand/sync-assets.ts index f1e4d62a..52089de1 100644 --- a/scripts/brand/sync-assets.ts +++ b/scripts/brand/sync-assets.ts @@ -9,3 +9,5 @@ const publicLogo = resolve('public/logo.svg'); mkdirSync(dirname(publicLogo), { recursive: true }); copyFileSync(canonicalLogo, publicLogo); +// ShellFrame advertises this exact URL on both public and authenticated pages. +copyFileSync(canonicalLogo, resolve('public/favicon.svg')); diff --git a/tests/unit/brand-assets.test.ts b/tests/unit/brand-assets.test.ts new file mode 100644 index 00000000..cfc61ad1 --- /dev/null +++ b/tests/unit/brand-assets.test.ts @@ -0,0 +1,15 @@ +import { it, expect } from 'vitest'; +import { execFileSync } from 'node:child_process'; +import { mkdtempSync, readFileSync, rmSync } from 'node:fs'; +import { tmpdir } from 'node:os'; +import { join, resolve } from 'node:path'; + +it('materializes the canonical TreeSeed logo at both advertised public asset URLs', () => { + const root = mkdtempSync(join(tmpdir(), 'treeseed-brand-')); + try { + execFileSync(process.execPath, ['--experimental-strip-types', resolve('scripts/brand/sync-assets.ts')], { cwd: root }); + const canonical = readFileSync(new URL(import.meta.resolve('@treeseed/ui/assets/treeseed-logo.svg'))); + expect(readFileSync(join(root, 'public/logo.svg'))).toEqual(canonical); + expect(readFileSync(join(root, 'public/favicon.svg'))).toEqual(canonical); + } finally { rmSync(root, { recursive: true, force: true }); } +});