3.9 KiB
3.9 KiB
Plan: Add Colors to Sync Command Output
Current State
The sync output has three layers, each needing color treatment:
Layer 1: Stage Lines (during sync)
✓ Issues 10 issues from 2 projects 4.2s
✓ Status 3 statuses updated · 5 seen 4.2s
vs/typescript-code 2 issues · 1 statuses updated
✓ MRs 5 merge requests from 2 projects 12.3s
vs/python-code 3 MRs · 10 discussions
✓ Docs 1,200 documents generated 8.1s
✓ Embed 3,400 chunks embedded 45.2s
What's uncolored: icons, labels, numbers, elapsed times, sub-row project paths, failure counts in parentheses.
Layer 2: Summary (after sync)
Synced 10 issues and 5 MRs in 42.3s
120 discussions · 45 events · 12 diffs · 3 statuses updated
1,200 docs regenerated · 3,400 embedded
What's already colored: headline ("Synced" = green bold, "Sync completed with issues" = warning bold), issue/MR counts (bold), error line (red). Detail lines are all dim.
Layer 3: Timing breakdown (-t flag)
── Timing ──────────────────────
issues .............. 4.2s
merge_requests ...... 12.3s
What's already colored: dots (dim), time (bold), errors (red), rate limits (warning).
Color Plan
Using only existing Theme methods — no new colors needed.
Stage Lines (format_stage_line + callers in sync.rs)
| Element | Current | Proposed | Theme method |
|---|---|---|---|
| Icon (✓/⚠) | plain | green for success, yellow for warning | Theme::success() / Theme::warning() |
| Label ("Issues", "MRs", etc.) | plain | bold | Theme::bold() |
| Numbers in summary text | plain | bold | Theme::bold() (just the count) |
| Elapsed time | plain | muted gray | Theme::timing() |
| Failure text in parens | plain | warning/error color | Theme::warning() |
Sub-rows (project breakdown lines)
| Element | Current | Proposed |
|---|---|---|
| Project path | dim | Theme::muted() (slightly brighter than dim) |
| Counts (numbers only) | dim | Theme::dim() but numbers in normal weight |
| Error/failure counts | dim | Theme::warning() |
| Middle dots | dim | keep dim (they're separators, should recede) |
Summary (print_sync)
| Element | Current | Proposed |
|---|---|---|
| Issue/MR counts in headline | bold only | Theme::info() + bold (cyan numbers pop) |
| Time in headline | plain | Theme::timing() |
| Detail line numbers | all dim | numbers in Theme::info(), rest stays dim |
| Doc line numbers | all dim | numbers in Theme::info(), rest stays dim |
| "Already up to date" time | plain | Theme::timing() |
Files to Change
src/cli/progress.rs—format_stage_line(): apply color to icon, bold to label,Theme::timing()to elapsedsrc/cli/commands/sync.rs—- Pass colored icons to
format_stage_line/emit_stage_line/emit_stage_block - Color failure text in
append_failures() - Color numbers and time in
print_sync() - Color error/failure counts in sub-row functions (
issue_sub_rows,mr_sub_rows,status_sub_rows)
- Pass colored icons to
Approach
format_stage_linealready receives the icon string — color it before passing- Add a
color_iconhelper that applies success/warning color to the icon glyph - Bold the label in
format_stage_line - Apply
Theme::timing()to elapsed informat_stage_line - In
append_failures, wrap failure text inTheme::warning() - In
print_sync, wrap count numbers withTheme::info().bold() - In sub-row functions, apply
Theme::warning()to error/failure parts only (keep rest dim)
Non-goals
- No changes to robot mode (JSON output)
- No changes to dry-run output (already reasonably colored)
- No new Theme colors — use existing palette
- No changes to timing breakdown (already colored)