Skip to content

0.0.7 development plan

The 0.0.7 workstream prepares CLI watch, batch conversion, config profiles, and still-image rendering for release. CLI orchestration stays at the binary boundary; image rendering belongs to rich-art. Core rendering remains unchanged. This is source preparation, not evidence of tags or publication.

Finish scope

  1. Extend deterministic regression coverage to batch, profiles, watch and image command contracts, including redirected watch behavior and machine reports.
  2. Capture fresh CLI demos from the actual build and record reproducible commands.
  3. Document watch editing, batch HTML exports and compact/CI/docs profiles in workflow recipes.
  4. Keep --jobs help truthful: execution remains serial and the positive value is reserved for a future concurrency limit.
  5. Reconcile dependency changes, independent package versions and release notes; review open dependency PR #181 without treating unrelated upgrades as done.
  6. Add bounded still-image contain/cover fitting and background compositing.

Regression execution and fresh captures must be recorded after verification; this plan does not certify either gate by itself.

Bounded image scope

  • Add public ImageFit plus fit and background options to rich-art.
  • Expose --image-fit contain|cover and --image-background '#RRGGBB' for still images. Explicit fitting requires --height; use existing --width for the canvas width.
  • Contain preserves the whole image with padding; cover preserves aspect ratio while cropping to fill the canvas. Background controls compositing.
  • Preserve existing image behavior when neither new option is supplied.
  • Keep GIF/diff behavior and faithful core rendering outside this change.

Package and release status

The source manifest versions are independently rs-rich-cli 0.0.7, rs-rich-art 0.0.5, rs-rich-ext 0.0.6 and rs-rich 0.0.4. Internal dependency requirements must agree with those versions. A CLI workstream number does not imply a coordinated workspace release. Tags and publication are separate steps. See preparation notes for the release checklist.

Watch scope

  • Poll local files on a configurable interval without a busy loop; hash contents with a fixed 64 KiB buffer to detect preserved-timestamp changes.
  • Clear and repaint the terminal viewport on changes using existing controls.
  • Treat atomic-save gaps and parse failures as recoverable frames.
  • Poll URLs only when the existing fetch feature is enabled; optionally hash fetched responses to suppress unchanged frames.
  • Render one snapshot and exit when stdout is redirected.

The implementation reuses the existing parser, decorators, exporters and one-shot render path. Its status is recorded in docs/PORTING.md because this is intentionally a CLI-only divergence from upstream rich-cli.

Confidence tooling

This workstream is deliberately bounded to regression confidence for the selected CLI surfaces. It does not introduce a RenderTarget abstraction or a general fuzzing service.

Issue Completed here Deferred
#150/#135 Deterministic CLI snapshot runner with width/profile injection, terminal PTY execution for color profiles, option-terminator (--) positioning, stable environment, normalized output, and unified failure diffs. Generalized snapshot infrastructure beyond this release; batch/profile/watch/image regression coverage is part of the finish scope above.
#34 Differential corpus and generator extended with box renderables (Panel box variations) and deterministic safe-box capability profiles; replay remains seed-based. Differential generation for future CLI subcommands and unbounded fuzzing.
#35 Library benchmark width/color controls and artifact metadata. CI timing thresholds, artifact retention policy, and cross-host performance claims.

Run the focused checks with:

python -m unittest scripts/test_snapshot_cli.py scripts/test_diff_rich.py
cargo test -p rs-rich --example library_bench

The snapshot runner's capability profiles are explicit inputs. It does not inspect the developer terminal, and missing or changed snapshots fail with a bounded unified diff rather than silently rewriting files.