Skip to content

iris brands logo + push refuses a logo that will not show (#192664); dashboard template wears the client's kit (#110009) - #494

Merged
mayoalexander merged 2 commits into
mainfrom
wt/192664-brand-logo-cli
Nov 6, 2026
Merged

mayoalexander merged 2 commits into
mainfrom
wt/192664-brand-logo-cli

Conversation

@mayoalexander

@mayoalexander mayoalexander commented Nov 6, 2026 •

Copy link
Copy Markdown

Epic #192663 · B1 #192664: the CLI half. Attaches #184167 (cheapest fixes 1 and 2) and #184116. Also B5 #192668 → #110009 (dashboard template), below.

What

  • iris brands logo <slug>: the direct answer to "what is our logo" (#184167, item 2). It shows:

    • the five variants (primary, on_dark, on_light, icon, social);
    • which variant a light page and a dark page get, and whether it needs a tile;
    • what is missing.

    Options:

    • --check fetches each URL; each must answer 200 with an image/*.
    • --on '#fff' prints just the URL to use (scriptable). A tile note goes to stderr.
    • --json prints everything above as JSON.
  • A Logo block in iris brands show and iris brands dt get (#184167, item 1: "where people already look"). It lists variants, the light/dark picks, and flags each missing variant with what it costs.

  • iris brands dt push / dt set refuse a broken logo. Every brand.logo URL must be absolute and answer 200 with an image (HEAD first, then GET when a host refuses HEAD). A 404, an HTML page, or a site-relative path stops the push and says why. --skip-logo-check overrides, with a warning.

  • brand-logo.ts is a copy of fl-iris-api's resolver (resources/js/lib/brand-logo.ts, whose PHP twin every server surface uses). brand-logo.cases.json is the same fixture both of those are tested against.

Also: the client dashboard template wears the client's kit (B5 · #110009)

iris dashboard (platform-dashboard.ts) read .colors off the {brand, name, design_tokens} envelope, found nothing, and gave every client the default green. #110009 was marked done, but the template never actually received a colour.

  • It now reads design_tokens and takes colours as hex from any shape ({DEFAULT} included). CatoDrive gets navy #1e3a5f.
  • It uses the brand's ground only when it is light, because the dashboard is a light page. IRIS's black ground is not used.
  • It sets branding.logoUrl to logoFor(kit, the dashboard's ground), so IRIS gets its on_light mark, and faviconUrl to the icon.
  • platform-dashboard.test.ts (3 tests) covers it. The old envelope read, restored as a mutant, fails 2 of the 3.

Verified

Run on iris-hive-001 with the pinned bun 1.3.14:

  • bun test brand-logo.test.ts brand-contract.test.ts brand-import.test.ts: 72 pass. At the final commit, brand-logo.test.ts platform-dashboard.test.ts brand-contract.test.ts: 54 pass, 0 fail.
  • bun run typecheck (tsgo): clean.
  • Mutation checks, each caught by a failing test: 200 not required; any content-type accepted; no GET retry after a refused HEAD.
  • Live, read-only against the real kits:
    • iris brands logo iris --check: all 5 variants ✓ 200 image. The light page gets on_light, the dark page on_dark.
    • iris brands logo freelabel --json: no ground variants. Primary on a #0a0a0a tile for light pages; on_light, on_dark and social flagged missing.
    • iris brands logo iris --on '#ffffff' prints …/iris-logo-dark-transparent.png.
  • dt push was not run live: when its check passes it writes production brand data. The gate is covered by the unit tests above.

Heads-up for the merge

B2's agent (#192665) has work in progress in platform-brands.ts (the brands show header, --json, --bloq). This PR keeps out of those lines: it adds one import, one printLogoSummary(dt) call after the Design Tokens summary, the push/set gate, and a new command. Expect at most an import-line conflict.

Ships to users with the next CLI release (sync-iris-v1.ts copies packages/opencode/src from main).

🤖 Generated with Claude Code

Alex Mayo and others added 2 commits November 5, 2026 21:09
…ow / dt get, and dt push/set refuse a logo URL that is not a 200 image (#192664)

Co-Authored-By: Claude Opus 5.5 <[email protected]>
…ur, light ground and logo through the resolver (#110009)

fetchDesignTokens read .colors off the {brand, name, design_tokens} envelope and found nothing, so
every dashboard was the default green. Colours are read as hex from any stored shape; the logo is
logoFor(kit, the dashboard's light ground).

Co-Authored-By: Claude Opus 5.5 <[email protected]>
@mayoalexander mayoalexander changed the title iris brands logo, a Logo block in show / dt get, and dt push refuses a logo that will not show (#192664) iris brands logo + push refuses a logo that will not show (#192664); dashboard template wears the client's kit (#110009) Nov 6, 2026
@mayoalexander
mayoalexander merged commit c68fffe into main Nov 6, 2026
2 of 6 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant