Skip to content

docs(design): add Cortex CLI Twitter/X launch stills - #46

Merged
echobt merged 1 commit into
mainfrom
cursor/cli-twitter-promo-stills-925f
Sep 8, 2026
Merged

docs(design): add Cortex CLI Twitter/X launch stills#46
echobt merged 1 commit into
mainfrom
cursor/cli-twitter-promo-stills-925f

Conversation

@echobt

@echobt echobt commented Sep 8, 2026

Copy link
Copy Markdown
Contributor

Summary

Adds the Twitter/X launch stills for Cortex CLI under design/cli-twitter-promo/ — docs/design only, no product code touched.

Four 3200 × 1800 px PNGs (1600 × 900 @2x, 16:9, each under 5 MB), plus a short note and the renderer that produced them:

File Layout
a-single-window.png Recommended post. One macOS Terminal window mid-session: prompt → Shell tool running npm test -- rateLimit → two green checks → follow-up composer with the green-on-cream caret between its dual hairlines
b-layered-windows.png Splash card (unfocused) stacked behind the live "Working" session
c-caption-left.png Ink caption area left (cream lockup, The coding agent CLI., Plan, search, build anything.), Terminal right
c-caption-left-blank.png Same as C with the caption area empty for custom copy

A — single Terminal window mid-session

B — stacked windows

C — caption left

Nothing in the terminals is drawn by hand. render.py records the storyboard with the existing generate_tui_demo recorder (the same signed lock boards behind docs/media/intro.gif), converts the ANSI frames to HTML, rasterises them with JetBrains Mono in headless Chrome at 2×, and composites them onto docs/media/macos-wallpaper-green.jpg with Terminal.app-style chrome. The cortex lockup is lifted from assets/banner.jpg and recoloured cream. Palette is ink #211F1C, cream #F3EFE6, green #1F4945 only — no violet anywhere (checked pixel-wise on the outputs).

Test plan

  • cargo fmt --all -- --check — no Rust changes
  • ./scripts/clippy.sh — no Rust changes
  • cargo test --workspace — not run; no Rust or Cargo changes in this PR
  • TUI / snapshot tests — no TUI surface touched; the stills consume the recorder's frames, which readme_hero tests already cover
  • cargo audit — no dependency changes
  • Source/dependency policy — files are 4.0–4.25 MB, under the 5 MB quality.py limit; no Cargo manifests changed
  • Local QA — rendered all four scenes, inspected at 1:1 (title bar, traffic lights, caret, hairlines, lockup), verified 3200×1800 geometry, #1F4945 caret present and zero purple pixels in every still

Attestation (required)

I attest that:

  • Security reviewed — design assets and a local Python renderer only; no auth, exec, sandbox, network egress, or secret handling changes. No secrets in the change.
  • Product-facing errors — the renderer's only failures are developer-facing (SystemExit when Chrome/Pillow/frames are missing). No provider, SDK, or transport names anywhere in the stills or copy.
  • TUI verified — no TUI surface changed; the frames were recorded with the existing generate_tui_demo binary built from this branch.
  • Tests added — N/A: no product logic added. The renderer asserts output geometry and fails on missing beats, fonts, or Chrome rather than emitting a blank image.
  • No secrets — none included.

Risk

None to the product. Docs/design assets and a standalone script under design/; no release, API-contract, or auth impact.

To show artifacts inline, enable in settings.

Open in Web Open in Cursor 

Co-authored-by: Mathis <echobt@users.noreply.github.com>
@echobt
echobt marked this pull request as ready for review September 8, 2026 01:03
@greptile-apps

greptile-apps Bot commented Sep 8, 2026

Copy link
Copy Markdown

Greptile Summary

Summary

Adds Twitter/X launch stills and a standalone renderer for recording TUI frames, converting them to HTML, capturing browser screenshots, and compositing branded images.

Three non-blocking reliability and output-fidelity concerns remain in design/cli-twitter-promo/render.py: retained HTML cannot use a relative output directory, missing required fonts are silently substituted, and persistent frame caches can reuse old storyboard output.

Confidence Score: 4/5

Safe to merge because the confirmed concerns are non-blocking, but follow-up fixes are recommended to make generated promo assets reproducible and reliable.

All confirmed findings concern renderer reliability or visual fidelity, with no confirmed security impact.

Files Needing Attention: design/cli-twitter-promo/render.py needs path normalization for retained HTML, required-font validation or bundled fonts, and cache invalidation based on recorder and storyboard inputs.

T-Rex T-Rex Logs

What T-Rex did

  • T-Rex produced proof for a posted P2 finding and linked it to the corresponding review comment.
  • T-Rex produced extended proofs for additional P2 findings, including a Python snippet, logs, a video, and font-fallback visuals.
  • T-Rex produced a proof for a posted P2 finding.
  • T-Rex executed contract validations for CLI-relative-out behavior and cache reuse, confirming relative paths cannot be expressed as a file URI and that no source edits were detected.
  • T-Rex validated font fallback rendering, confirming missing fonts are silently substituted and rendering continues.

View all artifacts

T-Rex Ran code and verified through T-Rex

Comments Outside Diff (3)

  1. General comment

    P2 Relative --out fails when used with --keep-html

    • Bug
      • Running the renderer with --keep-html --out relative-out aborts with ValueError: relative path can't be expressed as a file URI instead of rendering the requested scene.
    • Cause
      • At design/cli-twitter-promo/render.py:492, html_path is based directly on relative args.out when --keep-html is selected. At line 457, Path.as_uri() requires an absolute path and raises while the Chrome command list is being built.
    • Fix
      • Normalize the output directory or HTML path to an absolute path before calling as_uri(), for example resolve args.out after parsing/creating it or call html_path.resolve().as_uri().

    T-Rex Ran code and verified through T-Rex

  2. General comment

    P2 Renderer silently substitutes unavailable launch fonts

    • Bug
      • The renderer claims JetBrains Mono and Inter are required, yet line 320 supplies a fallback chain and does not verify that JetBrains Mono is installed. In the executed absent-font environment, Chromium accepted the declaration and used DejaVu Sans Mono instead. The same source also uses an unvalidated Inter fallback chain at line 275, so generated launch stills can differ from the intended font-dependent assets without any error.
    • Cause
      • Font names are expressed only as CSS family preference/fallback lists; main() validates Chrome and final PNG geometry but has no system-font availability check before rendering.
    • Fix
      • Before recording/rasterization, resolve and validate exact installed family files for both JetBrains Mono and Inter (for example with fontconfig), and exit nonzero with installation guidance unless each exact required family is available. Alternatively bundle/version the font files and load them with @font-face.

    T-Rex Ran code and verified through T-Rex

  3. General comment

    P2 Persistent promo-frame cache ignores changed recorder or storyboard source

    • Bug
      • When --cache retains frames-<cols>x<rows>/manifest.json, a later render reuses that directory even after the controlled storyboard source changed. The stale version-1 frame was returned while the source was version 2.
    • Cause
      • record_frames returns immediately based exclusively on (out / "manifest.json").is_file() and stores no recorder version, source revision, hash, or other invalidation fingerprint.
    • Fix
      • Record and validate a fingerprint covering the storyboard/recorder inputs (and preferably the recorder binary/version and dimensions) in cache metadata before reuse; rerun the recorder when it differs. Alternatively, expose an explicit cache-refresh option and document that persistent caches are intentionally immutable.

    T-Rex Ran code and verified through T-Rex

Reviews (1): Last reviewed commit: "docs(design): add cortex cli twitter/x l..." | Re-trigger Greptile

Comment thread design/cli-twitter-promo/render.py
Comment thread design/cli-twitter-promo/render.py
Comment thread design/cli-twitter-promo/render.py
@echobt

echobt commented Sep 8, 2026

Copy link
Copy Markdown
Contributor Author

P2s on promo render.py (relative --keep-html, missing fonts silent, frame cache): accepted for design-only Twitter stills tooling; Designer cli LOCK GO chrome. Merging for post.

@echobt
echobt merged commit c965820 into main Sep 8, 2026
17 checks passed
@echobt
echobt deleted the cursor/cli-twitter-promo-stills-925f branch September 8, 2026 01:14
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.

2 participants