Skip to content

Welcome Studio (Slice 6, stacked on #519; includes #518) - #521

Draft
raiseCatError wants to merge 9 commits into
feature/render-routing-20261028from
feature/welcome-studio-20261028
Draft

raiseCatError wants to merge 9 commits into
feature/render-routing-20261028from
feature/welcome-studio-20261028

Conversation

@raiseCatError

Copy link
Copy Markdown
Owner

Stacked on #519 (Slice 4). It also merges #518 (bounded animated GIF/APNG decoding), so that PR's commits appear here until #518 lands. Retarget only after review.

What

Welcome Studio, opened from /appearance › Welcome and /welcome:

  • Compatibility: existing startup cards are unchanged. A config with no saved Studio layout (or a missing/unreadable config) keeps the historical card.
  • Native layout: logo (mascot, image, or ANSI/ASCII art), fit and alpha, title, greeting, links, border and palette.
  • Facts: OS, shell and version by default. Hostname, user, path and Git are opt-in. No shell commands run.
  • Still-image effects: float, pulse, parallax, glow, shimmer, particles, reveal and pan/zoom. These are whole-image treatments, with no invented motion inside the picture.
  • Presets: save, duplicate, reset, import and export. Export never includes image bytes, and includes the asset path only on explicit opt-in. Import is strictly validated.
  • Assets: absolute, relative and ~/ paths, plus a local picker for PNG, JPEG, WebP, GIF, APNG, .ans and .txt files.
  • Editor preview: live, with pause/replay, compact/expanded, narrow/wide, theme, reduced-motion and before/after toggles. Esc restores the draft; S saves, which applies from the next start.
  • Startup animation: GIF/APNG frames play at startup through the same composition and the shared presentation clock.
    • It never blocks the composer.
    • It stops on input, resize, handover or shutdown, and releases its graphics.
    • Animation frames never enter the transcript.
  • P full-terminal preview: shows the current draft exactly as startup would, on NMSh's own alternate screen. There is no OS resize, no new session and no re-capture. Any key closes it and is swallowed.
  • One composition path: composeWelcome is shared by startup, the editor and P. There is no second animation engine.

Verification

  • Built by a delegated agent (Codex) in two parts and accepted by the lead after two independent reviews. All findings were fixed with regression tests.
  • Related tests, run through the repository runner's isolation: 370 tests, 364 pass, 2 skipped.
    • 4 live startup/session tests failed while another workload pushed the load average to 320. Their two files pass 24/24 when rerun at low load.
  • The full suite is left to CI.

Not verified: physical terminal QA of image playback and P on real hosts was not run.

…nest loading state

A missing or unreadable configuration keeps the historical startup card; only
a Studio save selects the native layout. While a startup image loads the card
says so, and no still is stored until it settles. Startup animation repaints
are capped at about 30 a second, and an archived card that was never painted
keeps its layout without the asset path. Documents Slice 6.
…ths on every platform

webpDecoderAvailable() is async, so 'if (webpDecoderAvailable())' tested a
Promise and always expected a successful decode. Ubuntu runners have no
WebP converter, so the Welcome admission test failed there.

A test-only seam (setWebpConvertersForTests) now forces the converter
list, so the no-converter refusal, a working converter, and a failing or
silent converter are each exercised on every platform. The no-converter
advice on Linux also names ffmpeg, which is a supported converter.

This branch has not been deployed

No deployments
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