Skip to content

Release 2.5.0 - #375

Open
callinmullaney wants to merge 7 commits into
developfrom
release-2.5.0
Open

callinmullaney wants to merge 7 commits into
developfrom
release-2.5.0

Conversation

@callinmullaney

Copy link
Copy Markdown
Contributor

Pull Request

Title requirement: Every pull request targeting main must have a
release-producing conventional title whose release type matches the complete
change, such as fix(scope): ... or feat(scope): .... CI evaluates the
title as a prospective squash commit; if squash merging is used, the title
becomes the release-bearing commit.

Summary

Related Issue

Verification

  • npm run build
  • npm run type
  • npm test
  • npm run pack:dry-run
  • npm run smoke:pack

Checklist

  • I added or updated tests for behavior changes.
  • I updated documentation for user-facing changes.
  • I did not manually change the package version; the release workflow owns
    it.

Output was produced by five unrelated renderers, each with its own symbols,
colour logic and idea of what a line looks like. Every command now opens a
session, threads each step onto one gutter, and closes with a summary or a
cancellation.

Adds lib/session.ts as the single renderer and rewrites log.ts on top of it,
keeping the log(method, message) signature so call sites are unchanged.
Prompts return a cancel sentinel rather than throwing, so runPrompt unwraps it
into a PromptCancelledError and cancellation is handled in one place.

Diagnostics move to stderr through a stream that removes escape sequences when
stderr is redirected, so `emulsify init 2> log.txt` writes plain text while
stdout stays a terminal.

Piped and redirected output is read by scripts, so it gets plain lines with no
gutter, symbols or colour, and spinners report phases as lines instead of
animating.

Commander failures are rendered through the same session and now suggest the
closest command, replacing bare `error: unknown command 'x'`. The version is a
value scripts read, so it prints as one plain line instead of a drawn box.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Utf5UMza9HgyUvKHWjYmpY
The progress bar was hardcoded to 100 cells. With a 44-character status message
it rendered 117 characters on an 80-column terminal, wrapped, and redrew to
column 1 of the wrapped line, so every tick left the previous one stranded
above it. Its five ticks also spent half their travel on a fraction of the
work: the 40-tick covered `npm install`, so the bar sat at 50% through the
longest wait and then jumped to 90%.

A spinner now names the phase it is in, which is the part a person can act on,
and it only starts once every value is validated and the target is reserved,
so no earlier failure can leave it spinning. Failures stop it before the error
is reported.

A successful init also ended in a yellow WARN badge, because the Drupal setup
instructions were returned with method 'warn'. They are guidance on a run that
worked, so they are now blocks on the success path, and the closing summary
names the project that was created.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Utf5UMza9HgyUvKHWjYmpY
`component list` printed one line per component with nothing on it but the
structure and the name. For Compound that is 29 near-identical lines, while the
system config already records which components are required and what each one
depends on, so installing `accordion` quietly brings five more with it.

The list is now grouped by structure, counts the required components in each
group, and names the dependencies a component brings with it. `system list`
aligns its repositories into a column.

Both render as one block rather than a run of loose lines, and both close with
a summary that says what to run next. `cache clear` reports its outcome the
same way.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Utf5UMza9HgyUvKHWjYmpY
Questions were drawn by one library and results by another, so a command
visibly changed voice between asking and reporting. Every prompt in the CLI now
comes from the same renderer as its output.

Each handler returns the outcome it actually reached instead of printing a
final line, so the session closes on the truth: a declined overwrite in
`component create` no longer reports a component as created, and
`system install` names the component set that landed.

Multi-line output that was packed into single log lines is now rendered as
blocks: installed dependencies, ejected template paths, dry-run previews and
the system install review. `system install`'s wizard header drops its 60-column
padding, which assumed a bare line and collided with the gutter.

Select and multi-select options carry a hint, so component lists show their
structure and eject types explain what they write.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Utf5UMza9HgyUvKHWjYmpY
The four libraries that produced the CLI's competing output styles are no
longer imported anywhere. @clack/prompts replaces all four, and the `dim` used
for debug output comes from colorette, which the CLI already depends on, rather
than adding a second colour library.

Runtime dependencies drop from ten to seven. The e2e expectations follow the
message changes from the commits above.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Utf5UMza9HgyUvKHWjYmpY
Computed by `npm run version:develop` from the unreleased history: a minor
release from v2.4.1.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Utf5UMza9HgyUvKHWjYmpY
The packed install smoke test still expected the boxed "Version: x.y.z"
format. It now asserts the plain line the CLI prints.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Utf5UMza9HgyUvKHWjYmpY
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