Skip to content

[luv-339] fix: drop startup ASCII wordmark; align version with link lines#338

Merged
NiveditJain merged 7 commits intomainfrom
luv-339
May 10, 2026
Merged

[luv-339] fix: drop startup ASCII wordmark; align version with link lines#338
NiveditJain merged 7 commits intomainfrom
luv-339

Conversation

@NiveditJain
Copy link
Copy Markdown
Member

@NiveditJain NiveditJain commented May 10, 2026

Summary

Earlier commits on this branch tried two iterations of the dashboard-startup wordmark (the original 10-row pixel-block, the 6-row trim, then a colored half-block render of the brand PNG). Every iteration read poorly in standard terminals — too tall, vertically stretched, or just visual noise — so this PR drops the banner entirely.

scripts/launch.ts now prints a plain-text failproof ai title and a labeled 📦 Version: <ver> line padded to the same column as the existing ⭐ Star us: / 📖 Docs: / 💬 Slack: lines, so version and URLs form one cleanly-aligned block:

  failproof ai

  📦 Version:      0.0.10-beta.10
  ⭐ Star us:      https://github.com/exospherehost/failproofai
  📖 Docs:         https://befailproof.ai
  💬 Slack:        https://join.slack.com/...

Removes the entire half-block pipeline added earlier in this branch:

  • scripts/generate-banner.ts (PNG → half-block generator)
  • scripts/banner.generated.ts (pre-rendered banner data)
  • assets/wordmark/source.png (brand wordmark source)
  • __tests__/scripts/banner.test.ts
  • pngjs + @types/pngjs devDeps

CHANGELOG entry under 0.0.10-beta.10 → Fixes consolidates the prior trim and colored-render entries from earlier commits on this branch into a single Fixes line.

Test plan

  • bun run lint clean (one pre-existing unrelated <img> warning).
  • bunx tsc --noEmit clean.
  • bun run test:run — all 1588 unit tests pass (6 banner tests removed alongside the file).
  • bun run build:cli succeeds.
  • node dist/cli.mjs prints the new aligned layout (verified locally — title, blank line, then four labeled lines aligned to col ~17 across Version / Star us / Docs / Slack).
  • CI green (quality + test + build + test-e2e + docs + CodeRabbit).

🤖 Generated with Claude Code

NiveditJain and others added 2 commits May 9, 2026 17:49
…retched

Drop the f-top-serif row and the bottom row of the p-descender (rows 1
and 10 of the original 10-row design). Many monospace fonts render each
cell ~2-3× taller than wide, so 10 char-rows of pixel-block letters end
up reading as a tall rectangle on screen even though the source-pixel
ratio is fine. 8 rows keeps the curl/crossbar/foot of "f", a stub
descender on "p", and every other letter shape unchanged.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
@coderabbitai
Copy link
Copy Markdown

coderabbitai Bot commented May 10, 2026

Note

Reviews paused

It looks like this branch is under active development. To avoid overwhelming you with review comments due to an influx of new commits, CodeRabbit has automatically paused this review. You can configure this behavior by changing the reviews.auto_review.auto_pause_after_reviewed_commits setting.

Use the following commands to manage reviews:

  • @coderabbitai resume to resume automatic reviews.
  • @coderabbitai review to trigger a single review.

Use the checkboxes below for quick actions:

  • ▶️ Resume reviews
  • 🔍 Trigger review
📝 Walkthrough

Walkthrough

Adds a PNG→ANSI banner generator and its generated assets, integrates pre-generated colored/mono banners into the launcher with terminal capability and width selection, adds Vitest checks for the generated banners, updates package devDependencies, and documents the changes in CHANGELOG.

Changes

Banner generation & integration

Layer / File(s) Summary
Banner generator script
scripts/generate-banner.ts
New script that crops/downsamples assets/wordmark/source.png, renders colored and monochrome ANSI/Unicode banner rows, and writes scripts/banner.generated.ts.
Generated banner module
scripts/banner.generated.ts
Exports BANNER_COLS, BANNER_ROWS, coloredBanner: string[], and monoBanner: string[] produced from the source PNG.
Launch integration
scripts/launch.ts
Replaces hand-authored bannerLines with imports from banner.generated, selects colored vs mono based on terminal color support, and falls back to plain text when terminal width < BANNER_COLS + 2.
Tests
__tests__/scripts/banner.test.ts
Adds Vitest suite asserting pinned dimensions, line counts, monoBanner lacks ANSI and uses allowed block/space chars, and coloredBanner contains 24-bit ANSI sequences and correct visible widths.
Dev dependencies
package.json
Adds/updates @types/pngjs and pngjs (^7.0.0) in devDependencies; block ordering adjusted.
Changelog
CHANGELOG.md
Adds 0.0.10-beta.10 Features entry for the generated colored/mono banner pipeline and a Fixes entry documenting trimming of the ASCII wordmark to 6 rows.

🎯 4 (Complex) | ⏱️ ~45 minutes

Sequence Diagram(s)

sequenceDiagram
  participant Launch
  participant BannerModule
  participant Terminal
  Launch->>BannerModule: import colored/mono + BANNER_COLS
  Launch->>Terminal: check columns & color support
  Launch->>Terminal: print selected banner or plain text
Loading

"I cropped my carrot to a perfect frame,
Pixels halved to glow with color and name.
I downsampled, I rendered, I wrote with cheer—
A bunny-made badge for all to revere. 🐇🎨"

🚥 Pre-merge checks | ✅ 2 | ❌ 3

❌ Failed checks (3 warnings)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 0.00% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
Title check ⚠️ Warning The PR title references feature #339 but describes dropping the ASCII wordmark and aligning version, which contradicts the objectives describing a colored half-block banner render implementation. The title should accurately reflect the main change: implementing a colored half-block banner render from the wordmark PNG, or be updated to match the current code state if the banner was removed.
Description check ⚠️ Warning The PR description states the banner pipeline was entirely removed (generate-banner.ts, banner.generated.ts, PNG, tests, dependencies), but the code summary shows these files were added with +151, +26, +47 lines respectively, indicating an internal inconsistency. Clarify whether the banner implementation was added (per code) or removed (per description). If removed, provide evidence of the removal. If added, update description to match the actual implementation.
✅ Passed checks (2 passed)
Check name Status Explanation
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing Touches
📝 Generate docstrings
  • Create stacked PR
  • Commit on current branch

Comment @coderabbitai help to get the list of available commands and usage tips.

Copy link
Copy Markdown

@coderabbitai coderabbitai Bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 1

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@CHANGELOG.md`:
- Line 3: Update the CHANGELOG header line for "## 0.0.10-beta.10 — 2026-05-09"
to use today's date by replacing 2026-05-09 with 2026-05-10 so the header reads
"## 0.0.10-beta.10 — 2026-05-10".
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro

Run ID: 2d934ba8-bbd8-4287-8e47-4d3b751a6008

📥 Commits

Reviewing files that changed from the base of the PR and between 4dc8004 and 5256736.

📒 Files selected for processing (2)
  • CHANGELOG.md
  • scripts/launch.ts

Comment thread CHANGELOG.md Outdated
NiveditJain and others added 3 commits May 9, 2026 17:54
Per CodeRabbit on PR #338: section was dated 2026-05-09 but the actual
UTC date is 2026-05-10, and the project rule for the section heading
date is "today's date".

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
The 8-row trim still rendered as roughly square on terminals where each
cell is ~2× taller than wide. Drop one more middle-body row so the
bowls of a/p/o use only top-arc + bottom-arc (no 3-row interior); f and
the descender of p still survive.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
Replace the hand-crafted monochrome pixel-block banner in scripts/launch.ts
with a colored half-block render of the actual failproofai wordmark logo.

A new scripts/generate-banner.ts reads assets/wordmark/source.png, crops to
the non-transparent bounding box, box-filter downsamples to a 46x7 character
grid (= 46x14 source pixels via the U+2580 upper-half-block trick so each
char encodes 2 vertically-stacked source pixels at 1:1 aspect), and emits
scripts/banner.generated.ts with two pre-rendered arrays:

  - coloredBanner: 24-bit ANSI fg/bg per cell so the teal flower over the
    "i" and the pink "l"-stem highlights from the brand mark survive
  - monoBanner: same grid in plain Unicode block chars (- _ # space)

scripts/launch.ts picks the variant: TTY + COLORTERM=truecolor/24bit (or
FORCE_COLOR=3 to override the isTTY check chalk-style) selects coloredBanner;
NO_COLOR=1, non-TTY without FORCE_COLOR, or non-truecolor terminals fall
back to monoBanner; and the existing plain-text "failproof ai" fallback
still kicks in when the terminal is narrower than the art.

The PNG itself is not loaded at runtime - only by scripts/generate-banner.ts
when re-generating the bundled banner. pngjs + @types/pngjs added as
devDeps for the generator.

New unit tests in __tests__/scripts/banner.test.ts pin the grid dimensions,
ANSI presence in the colored variant, mono-only-blocks shape, visible-pixel
count, and per-line cell width matches BANNER_COLS.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
@NiveditJain NiveditJain changed the title [luv-339] chore: trim startup banner to 8 rows [luv-339] feat: render dashboard banner from actual brand wordmark May 10, 2026
Copy link
Copy Markdown

@coderabbitai coderabbitai Bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 1

🧹 Nitpick comments (1)
scripts/launch.ts (1)

16-48: ⚡ Quick win

Add unit coverage for the banner-selection branches.

The new behavior lives in the width/color/env matrix here, but the added test file only validates the generated asset shape. Please add cases for at least: narrow terminal → plain text, NO_COLOR/non-truecolor → mono, and COLORTERM=truecolor or FORCE_COLOR=3 → colored.

As per coding guidelines, "Always add unit tests for new behaviour. Place tests in tests/."

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@scripts/launch.ts` around lines 16 - 48, Add unit tests under __tests__/ that
exercise the banner-selection branches by manipulating process.stdout.columns,
process.stdout.isTTY, and env vars used in launch.ts (COLORTERM, NO_COLOR,
FORCE_COLOR) and then importing/initializing the module to read the computed
banner variable. Specifically: (1) set process.stdout.columns smaller than
BANNER_COLS to assert banner === "  failproof ai" (narrow terminal case), (2)
set isTTY=false with NO_COLOR=1 or FORCE_COLOR="0" (and columns >= BANNER_COLS)
to assert the monoBanner path is chosen (compare banner to "  " +
monoBanner.join("\n  ")), and (3) set COLORTERM="truecolor" or FORCE_COLOR="3"
with isTTY true to assert the coloredBanner path is chosen (compare banner to " 
" + coloredBanner.join("\n  ")). Ensure each test resets env and process.stdout
properties after running so other tests aren’t affected.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@__tests__/scripts/banner.test.ts`:
- Around line 6-9: The test currently only checks BANNER_COLS and BANNER_ROWS
are > 0; change it to assert the concrete expected dimensions (replace
expect(...).toBeGreaterThan(0) with expect(BANNER_COLS).toBe(<expectedCols>) and
expect(BANNER_ROWS).toBe(<expectedRows>)) using the actual intended footprint
values from the banner/layout source (refer to where BANNER_COLS and BANNER_ROWS
are defined) so the test will fail if regeneration changes the layout; update
the expected numbers to the correct constants and keep the assertions in
__tests__/scripts/banner.test.ts.

---

Nitpick comments:
In `@scripts/launch.ts`:
- Around line 16-48: Add unit tests under __tests__/ that exercise the
banner-selection branches by manipulating process.stdout.columns,
process.stdout.isTTY, and env vars used in launch.ts (COLORTERM, NO_COLOR,
FORCE_COLOR) and then importing/initializing the module to read the computed
banner variable. Specifically: (1) set process.stdout.columns smaller than
BANNER_COLS to assert banner === "  failproof ai" (narrow terminal case), (2)
set isTTY=false with NO_COLOR=1 or FORCE_COLOR="0" (and columns >= BANNER_COLS)
to assert the monoBanner path is chosen (compare banner to "  " +
monoBanner.join("\n  ")), and (3) set COLORTERM="truecolor" or FORCE_COLOR="3"
with isTTY true to assert the coloredBanner path is chosen (compare banner to " 
" + coloredBanner.join("\n  ")). Ensure each test resets env and process.stdout
properties after running so other tests aren’t affected.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro

Run ID: 77e0fffd-ca81-45e0-afe7-09d9302eb38d

📥 Commits

Reviewing files that changed from the base of the PR and between a329bfd and 8c369d5.

⛔ Files ignored due to path filters (2)
  • assets/wordmark/source.png is excluded by !**/*.png
  • bun.lock is excluded by !**/*.lock
📒 Files selected for processing (6)
  • CHANGELOG.md
  • __tests__/scripts/banner.test.ts
  • package.json
  • scripts/banner.generated.ts
  • scripts/generate-banner.ts
  • scripts/launch.ts
✅ Files skipped from review due to trivial changes (3)
  • package.json
  • scripts/banner.generated.ts
  • CHANGELOG.md

Comment thread __tests__/scripts/banner.test.ts Outdated
NiveditJain and others added 2 commits May 9, 2026 18:49
Tighten the dimension assertion in __tests__/scripts/banner.test.ts from
`> 0` to the concrete `BANNER_COLS = 46` / `BANNER_ROWS = 7` values so an
accidental regeneration at a different footprint trips this test instead
of silently shipping a resized startup banner.

Addresses CodeRabbit review comment on PR #338.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
…ines

Every iteration of the dashboard-startup banner this PR tried (the original
10-row pixel-block, the 6-row trim, and the colored half-block render of
the brand PNG) read poorly in standard terminals - too tall, vertically
stretched, or just visual noise.

Drop the banner entirely. scripts/launch.ts now prints a plain-text
"failproof ai" title and a "Version" line padded to the same column as
the existing "Star us" / "Docs" / "Slack" lines, so version and URLs
form one cleanly-aligned block:

    failproof ai

    Version:      0.0.10-beta.10
    Star us:      https://github.com/exospherehost/failproofai
    Docs:         https://befailproof.ai
    Slack:        https://join.slack.com/...

Removes the now-unused pipeline:
  - scripts/generate-banner.ts (PNG -> half-block generator)
  - scripts/banner.generated.ts (pre-rendered banner data)
  - assets/wordmark/source.png (brand wordmark source)
  - __tests__/scripts/banner.test.ts
  - pngjs + @types/pngjs devDeps

CHANGELOG entry under 0.0.10-beta.10 -> Fixes consolidates the prior
"trim from 10 to 6 rows" and the "colored half-block render" entries
from earlier commits on this branch into a single Fixes line.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
@NiveditJain NiveditJain changed the title [luv-339] feat: render dashboard banner from actual brand wordmark [luv-339] fix: drop startup ASCII wordmark; align version with link lines May 10, 2026
@NiveditJain NiveditJain merged commit 6910e64 into main May 10, 2026
9 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