Skip to content

feat(tui): show the Coven crown when no familiar holds the identity slot - #185

Merged
BunsDev merged 1 commit into
mainfrom
feat/crown-when-no-familiar
Sep 16, 2026
Merged

BunsDev merged 1 commit into
mainfrom
feat/crown-when-no-familiar

Conversation

@BunsDev

@BunsDev BunsDev commented Sep 16, 2026

Copy link
Copy Markdown
Member

What

The welcome box has an identity slot in its left column — a familiar's sigil, 11 columns by 4 rows of half-block art. It renders only when a familiar is configured. Without one the slot is blank, and Coven has no mark of its own anywhere in the interface; the product name appears once, as text, in the box border.

That slot now falls back to the crown from brand/logo/opencoven-mark.svg, downsampled into the same 11×4 half-block vocabulary the sigils use:

│       Welcome back buns!       │Tips for getting started
│                                │Start with small features or bug fixes...
│                ▄               │
│           ▄▄ ▄█▀█▄ ▄▄          │────────────────────────
│           █▀▀█▄ ▄█▀▀█          │What's new
│            ▀▄▄███▄▄▀           │/skills opens an interactive picker...
│                                │
│            Opus 4.8            │
│       Anthropic · online       │

Ramped from a dimmed violet up to COVEN_CODE_ACCENT.

The slot is borrowed, not taken

A configured familiar still wins it, unchanged. This only fills space that was previously empty.

That distinction is the whole design. A familiar's sigil is personal; the crown is not. Displacing someone's familiar with a product logo would be a regression, so the crown is strictly a fallback.

Fitting rather than reflowing

Sized to the existing slot deliberately. WELCOME_BOX_HEIGHT is load-bearing — both the footer anchor (render.rs:131) and the header height (:1082) key off it — so nothing reflows and no geometry changes.

The strings scripts/tui-tests/cases/02_startup.sh pins (Coven v, Tips for getting started, What's new, ❯) are untouched, and a test asserts they survive alongside the crown rather than trusting that.

On the ramp

The sigils already read as primary climbing to accent. The crown borrows that grammar rather than inventing a second visual language for the same slot.

How this differs from the original

Ported from the sibling launcher masthead in coven, but the premise there does not hold here. That launcher opened on a bare identity line with no mark and no slot, so a masthead was additive. Here the slot already existed and already had an owner — so the port became a fallback, not a new element.

I'd rather flag that than claim a clean port: the shape changed because the target was different.

Tests

  • coven_crown_fits_the_sigil_slot_and_ramps — 4 rows, every row exactly 11 columns, ramp endpoints are the dim violet and the accent, and the two differ (a flat mark is not a ramp)
  • welcome_box_shows_the_crown_when_no_familiar_is_configured — renders the box and asserts both the crown and all three pinned welcome strings

Verification

cd src-rust
cargo fmt --all -- --check                               # clean
cargo clippy --workspace --all-targets -- -D warnings    # clean
cargo test --workspace                                   # 32 suites, 0 failures
git diff --check                                         # clean

Manual TUI check per AGENTS.md, tmux 80×24 — the capture above is from that run.

The welcome box has an identity slot in its left column: a familiar's
sigil, 11 columns by 4 rows of half-block art. It renders only when a
familiar is configured. Without one the slot is simply blank, and Coven
has no mark of its own anywhere in the interface -- the product name
appears once, as text, in the box border.

That slot now falls back to Coven's crown, downsampled from
brand/logo/opencoven-mark.svg into the same 11x4 half-block vocabulary
the sigils use, ramped from a dimmed violet up to COVEN_CODE_ACCENT.

The slot is borrowed, not taken. A configured familiar still wins it,
unchanged; this only fills space that was previously empty. That
matters: a familiar's sigil is personal and the crown is not, so the
crown must never displace one.

The ramp borrows the grammar the sigils already use -- they read as
`primary` climbing to `accent` -- rather than inventing a second visual
language for the same slot.

Sized to the existing slot deliberately, so nothing reflows: the box
stays at WELCOME_BOX_HEIGHT, which the footer anchor and header height
both key off, and the strings scripts/tui-tests/cases/02_startup.sh
pins are untouched. A test asserts those survive alongside the crown.

Ported from the sibling implementation's launcher masthead, which had a
different premise: that launcher opened on a bare identity line with no
mark and no slot, so the mark was additive there. Here the slot already
existed and already had an owner, so the port is a fallback rather than
a new element.

Signed-off-by: Val Alexander <68980965+BunsDev@users.noreply.github.com>
@vercel

vercel Bot commented Sep 16, 2026 •

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated
docs Ready Ready Preview Sep 16, 2026 1:20pm UTC

Request Review

@BunsDev
BunsDev merged commit 82df971 into main Sep 16, 2026
4 checks passed

This branch was successfully deployed

1 active deployment
Preview — db09776b Deployed Sep 16, 2026 by vercel[bot]
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