---
spec: spinner.spec.md
---

## User Stories

- As a user, I want visual feedback during long-running operations so I know the CLI hasn't frozen
- As a user, I want the spinner to clean up after itself so my terminal isn't cluttered

## Acceptance Criteria

- `Spinner::start(msg)` displays an animated spinner with the given message
- `Spinner::finish()` clears the spinner line completely
- A random theme is chosen each time a spinner starts
- All themes animate smoothly without visual glitches

## Constraints

- No external RNG dependency — use platform primitives only
- Must work in both emoji-capable and basic terminals (mix of theme types)
- Spinner must not interfere with subsequent terminal output after `finish()`

## Out of Scope

- User-selectable spinner theme
- Progress bar mode (percentage/ETA)
- Nested or concurrent spinners
- Color/style customization
