# 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 1. **`src/cli/progress.rs`** — `format_stage_line()`: apply color to icon, bold to label, `Theme::timing()` to elapsed 2. **`src/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`) ## Approach - `format_stage_line` already receives the icon string — color it before passing - Add a `color_icon` helper that applies success/warning color to the icon glyph - Bold the label in `format_stage_line` - Apply `Theme::timing()` to elapsed in `format_stage_line` - In `append_failures`, wrap failure text in `Theme::warning()` - In `print_sync`, wrap count numbers with `Theme::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)