Files
gitlore/.claude/plan.md

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

  1. src/cli/progress.rsformat_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)