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¶
- Extend deterministic regression coverage to batch, profiles, watch and image command contracts, including redirected watch behavior and machine reports.
- Capture fresh CLI demos from the actual build and record reproducible commands.
- Document watch editing, batch HTML exports and compact/CI/docs profiles in workflow recipes.
- Keep
--jobshelp truthful: execution remains serial and the positive value is reserved for a future concurrency limit. - Reconcile dependency changes, independent package versions and release notes; review open dependency PR #181 without treating unrelated upgrades as done.
- Add bounded still-image
contain/coverfitting 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
ImageFitplusfitandbackgroundoptions torich-art. - Expose
--image-fit contain|coverand--image-background '#RRGGBB'for still images. Explicit fitting requires--height; use existing--widthfor 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
fetchfeature 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.